【发布时间】:2015-02-23 07:34:33
【问题描述】:
我有两个给定的数组:x 和 y。我想计算两个数组之间的相关系数如下:
import numpy as np
from scipy.stats import pearsonr
x = np.array([[[1,2,3,4],
[5,6,7,8]],
[[11,22,23,24],
[25,26,27,28]]])
i,j,k = x.shape
y = np.array([[[31,32,33,34],
[35,36,37,38]],
[[41,42,43,44],
[45,46,47,48]]])
xx = np.row_stack(np.dstack(x))
yy = np.row_stack(np.dstack(y))
results = []
for a, b in zip(xx,yy):
r_sq, p_val = pearsonr(a, b)
results.append(r_sq)
results = np.array(results).reshape(j,k)
print results
[[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]]
答案是正确的。但是,想知道使用 numpy 和/或 scipy 是否有更好更快的方法。
【问题讨论】:
-
可能是一个更好的问题 --> codereview.stackexchange.com
-
目标是计算数组x的元素[1,11]和数组y的元素[31,41]之间的相关系数,以此类推......
-
这在
codereview上是否真的更好是有争议的。是numpy矢量化的问题,Stack上也出现过很多这样的问题。如果主题行是“我如何对其进行矢量化”,您会建议将其移至 CR 吗? -
stackoverflow.com/questions/27624678 是最近对
numpy通过矢量化加速的另一个讨论。
标签: python arrays numpy statistics scipy