给定 n X m 矩阵,条目 x i,j ,compositional variance是 m X m 矩阵, i,j 条目包括表达式
Σ k = 1 n [ln 2 (x k,i / x < sub> 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
答案 0 :(得分:1)
假设您在NumPy术语中指的是(np.log(x[k, i] / x[k, j])**2)
,对于k = 1:n
进行总结,可以使用broadcasting
建议一种向量化方法 -
((np.log(x[:,:,None]/x[:,None])**2)).sum(0)