【发布时间】:2016-10-01 10:24:51
【问题描述】:
我想在 Python 中计算向量和数组的每一行之间的 Pearson 相关系数(假设为 numpy 和/或 scipy)。由于实际数据数组的大小和内存限制,无法使用标准相关矩阵计算函数。这是我的幼稚实现:
import numpy as np
import scipy.stats as sps
np.random.seed(0)
def correlateOneWithMany(one, many):
"""Return Pearson's correlation coef of 'one' with each row of 'many'."""
pr_arr = np.zeros((many.shape[0], 2), dtype=np.float64)
pr_arr[:] = np.nan
for row_num in np.arange(many.shape[0]):
pr_arr[row_num, :] = sps.pearsonr(one, many[row_num, :])
return pr_arr
obs, varz = 10 ** 3, 500
X = np.random.uniform(size=(obs, varz))
pr = correlateOneWithMany(X[0, :], X)
%timeit correlateOneWithMany(X[0, :], X)
# 10 loops, best of 3: 38.9 ms per loop
任何有关加速此过程的想法将不胜感激!
【问题讨论】:
-
"...由于实际数据数组的大小和内存限制。"请给出数组的典型大小和实际内存限制。
标签: python python-2.7 numpy scipy statistics