我需要计算两个不同矩阵的每一行之间的协方差,即第一个矩阵的第一行与第二个矩阵的第一行之间的协方差,依此类推,直到两个矩阵的最后一行。我可以在没有 NumPy 的情况下使用下面附加的代码来完成此操作,我的问题是:是否可以避免使用“for 循环”并使用 NumPy 获得相同的结果?
m1 = np.array([[1,2,3],[2,2,2]])
m2 = np.array([[2.56, 2.89, 3.76],[1,2,3.95]])
output = []
for a,b in zip(m1,m2):
cov = np.cov(a, b)
output.append(cov[0][1])
print(output)
提前致谢!
最佳答案
如果你正在处理大数组,我会考虑这个:
from numba import jit
import numpy as np
m1 = np.random.rand(10000, 3)
m2 = np.random.rand(10000, 3)
@jit(nopython=True)
def nb_cov(a, b):
return [np.cov(x)[0,1] for x in np.stack((a, b), axis=1)]
获取运行时间
>>> %timeit nb_cov(m1, m2)
The slowest run took 94.24 times longer than the fastest. This could mean that an intermediate result is being cached.
1 loop, best of 5: 10.5 ms per loop
比较
>>> %timeit [np.cov(x)[0,1] for x in np.stack((m1, m2), axis=1)]
1 loop, best of 5: 410 ms per loop
关于python - Numpy - 两个矩阵的行之间的协方差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69236194/