成分方差的矢量化计算

Vectorized Computation of Compositional Variance

给定一个包含条目 xi、jn X m 矩阵,compositional variance 是一个 m X m 矩阵,其中 i, j 条目包括表达式

k = 1n [ ln2(x k, i / xk, 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

假设您在 NumPy 术语中的意思是类似 (np.log(x[k, i] / x[k, j])**2) 的东西,被总结为 k = 1:n,可以建议使用 broadcasting -

的一种矢量化方法
((np.log(x[:,:,None]/x[:,None])**2)).sum(0)