2015-10-17 3 views
1

Учитывая п х м матрицы с элементами х I, J, то compositional variance является м х м матрицы, с I, J записи включая выражениеВекторизованного Вычисление композиционной Разница

к = 1п [Ln (х к, я/x k, j)]

(включает другие, легко рассчитанные выражения).

Это очень легко вычислить в цикле, но как его можно вычислить с помощью векторизации?


Вот дерьмовый код цикла:

x = np.array([[1, 2, 3], [4, 5, 6]], dtype=float) 

v = np.zeros((3, 3)) 

for i in range(3): 
    for j in range(3): 
     for k in range(2): 
      v[i, j] += np.log(x[k, i]/x[k, j])**2 

ответ

1

Предполагая, что вы имели в виду что-то вроде (np.log(x[k, i]/x[k, j])**2) с точки зрения NumPy, подводятся более для k = 1:n, один Векторизованных подход может быть предложен с broadcasting -

((np.log(x[:,:,None]/x[:,None])**2)).sum(0) 
+0

Спасибо. Передача, которую вы пишете, интересна, и я буду изучать ее, но я не согласен с предположением о намерении: я имел в виду лог-квадрат. –

+0

@AmiTavory Что-то вроде отредактированного кода? – Divakar

+0

:-) IDK, тем не менее, поскольку я еще не понимаю, что вы сделали. Большое спасибо за ответ. Конечно, я собираюсь попробовать. Оценил! –

Смежные вопросы