我需要获取一个形状为(M1, M2, N)
的数组a
和另一个形状为(N,)
的数组b
之间的协方差。
目前我的做法是使用for
循环块:
import numpy as np
M1, M2, N = 23, 50, 117
a = np.random.uniform(-2., 2., (M1, M2, N))
b = np.random.uniform(-1., 1., N)
c = []
for i in range(M1):
for j in range(M2):
c.append(np.cov(a[i][j], b)[0, 1])
但是对于大型的 (M1, M2)
,速度会有些慢。有没有办法加快速度?
tensordot
比dot
更好:np.tensordot(ac, bc, axes=((-1,-1)))
。 - Divakarnp.einsum
,np.dot
,np.tensordot
)都比for
块快得多。由于它们显然都同样快,我会选择np.dot
,因为对我来说更容易理解。谢谢你们两个! - Gabriel