Передача значений в функцию с использованием numpy - PullRequest
0 голосов
/ 30 марта 2019

Предположим, у меня есть функция, которая имеет три входа prob (x, mu, sig). С размерами:

x = 1 x 3
mu = 1 x 3
sig = 3 x 3

Теперь у меня есть набор данных X, средняя матрица M и стандарт. матрица отклонений сигма. Размеры: -

X : m x 3.
mean :  k x 3. 
sigma :  k x 3 x 3

Для каждого значения m я хочу передать все значения k в функции prob, чтобы вычислить значение моей ответственности.

Я могу передавать значения одно за другим, используя циклы for. Что было бы лучшим способом сделать это в NumPy.

Соответствующий код для справки:

responsibility = np.zeros((X.shape[0],k))
    s = np.zeros(k)
    for i in np.arange(X.shape[0]):
        for j in np.arange(k):
            s[j] = prob(X[i],MU[j],SIGMA[j])
        s = s/s.sum()
        responsibility[i] = s
    responsibility = np.transpose(responsibility)

1 Ответ

0 голосов
/ 30 марта 2019

Если допустимо использование одного цикла for, вы, вероятно, можете использовать следующее,

import itertools

sigma.shape = k, 9
zipped_array = np.array(list(zip(mean, sigma)))
all_possible_combo = list(itertools.product(X, zipped_array))
list_len = len(all_possible_combo) # = m * k
s = np.zeros(k)
responsibility = np.zeros((X.shape[0],k))
for i in range(list_len):
    X_arow = all_possible_combo[i][0]
    mean_single = all_possible_combo[i][1]
    sigma_single = all_possible_combo[i][2].reshape((3, 3))
    s = prob(X_arow, mean_single, sigma_single)
    s = s/s.sum()
    responsibility[i] = s
responsibility = np.transpose(responsibility)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...