Python 仅对数组的1列有效地计算皮尔逊相关系数

Python 仅对数组的1列有效地计算皮尔逊相关系数,python,numpy,correlation,Python,Numpy,Correlation,我有一个数组,它的形状是~(70036000),我只想计算一个特定列(相对于所有其他列)的皮尔逊相关系数,但要计算数千次。我已经尝试了很多方法,但似乎没有一种方法能达到令人难以置信的效率: 导入numpy df_corr=numpy.corrcoef(df.T) corr_column=df_corr.iloc[:,column_index] 这当然会计算出整个相关矩阵,在我的机器上大约需要12秒;这是一个问题,因为我需要这样做~35000次(arr每次在创建相关矩阵之前都会发生轻微变化) 我

我有一个数组,它的形状是~
(70036000)
,我只想计算一个特定列(相对于所有其他列)的皮尔逊相关系数,但要计算数千次。我已经尝试了很多方法,但似乎没有一种方法能达到令人难以置信的效率:

导入numpy
df_corr=numpy.corrcoef(df.T)
corr_column=df_corr.iloc[:,column_index]
这当然会计算出整个相关矩阵,在我的机器上大约需要12秒;这是一个问题,因为我需要这样做~35000次(arr每次在创建相关矩阵之前都会发生轻微变化)

我还尝试逐一迭代各列:

corr_column=numpy.zero(len(df))
对于df.columns中的x:
corr_column[x]=numpy.corrcoef(x=p_subset.iloc[:,gene_ix],y=p_subset.iloc[:,x])[0][1]
corr_column=vals.重塑(-1,1)

这在每次迭代约10秒时稍微快一点,但仍然太慢。有没有办法更快地找到一列和所有其他列之间的相关系数?

好吧,你可以自己实现这个公式:

将numpy导入为np
def corr(a,i):
'''
参数
----------
a:numpy阵列
i:列索引
退换商品
-------
c:numpy阵列
a[:,i]与a的所有其他列的相关系数
'''
平均值t=np.平均值(a,轴=0)
标准(a,轴=0)
平均值=平均值[i]
std_i=std_t[i]
平均值xy=np.平均值(a*a[:,i][:,无],轴=0)
c=(平均值x-平均值i*平均值t)/(标准值i*标准值t)
返回c
a=np.random.randint(0,10,(70036000))
%timeit corr(a,0)
每个回路608 ms±180 ms(7次运行的平均值±标准偏差,每个回路1次)
%timeit np.corrcoef(a.T)
#实际上我没有耐心让它在我的机器里完成
#使用较小的示例,上面的实现速度快了100倍。