I've got the following problem: I have a list (which is a single row of a matrix) with 4 values (features). Let's say:
x_temp = [3.4, 2.1, 3.3, 6.6]
at the same time I have an other array theta with 4 objects in it:
theta = [obj1, obj2, obj3, obj4]
So x_temp
has the same length as theta
.
Each of this objects have a method called get_log_probability()
. However these objects are not from the same class. so obj1
is from class A
, obj2
from class B
, obj3
from class C
and obj4
from class D
.
How can I call efficiently the get_log_probability()
for each element in x_temp
with the according object in theta
?
Final outcome should be:
call obj1.get_log_probability(x_temp[1])
call obj2.get_log_probability(x_temp[2])
call obj3.get_log_probability(x_temp[3])
call obj4.get_log_probability(x_temp[4])
and then append
to these probabilities to a new array.
the toy example with just 3 for loops looks as follows:
def predict(self, X):
y_hat = []
for z, new_x in enumerate(X):
# store the probability for each class
prob_classes = []
# 1st calculate log_prob of each class for new_x
for i, c in enumerate(self._classes):
prob_c = np.log(self._pi[i])
# 2nd calculate the log_prob of each feature
for j, theta in enumerate(self._theta[i]):
new_x_j = new_x[j]
prob_c += theta.get_log_probability([new_x_j])[0]
prob_classes.append(prob_c)
# select the highest posterior probability
max_y_hat = np.argmax(prob_classes)
y_hat.append(self._classes[max_y_hat])
return y_hat
self._theta is a 3x4 matrix with 3 classes and 4 features. each cell of this matrix contains an object with different methods. And I would like to call the same method (get_log_probability) for each object with its according value which is stored in new_x_j. new_x_j is an array with 4 values.
In my example the matrix is not that big, its more about how to elegantly apply the methods and to avoid looping over single values of a matrix!