成分方差的矢量化计算
Vectorized Computation of Compositional Variance
给定一个包含条目 xi、j 的 n 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)
给定一个包含条目 xi、j 的 n 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)