Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
二维和三维数组之间的相关系数-NumPy/Python_Python_Numpy_Multidimensional Array_Vectorization - Fatal编程技术网

二维和三维数组之间的相关系数-NumPy/Python

二维和三维数组之间的相关系数-NumPy/Python,python,numpy,multidimensional-array,vectorization,Python,Numpy,Multidimensional Array,Vectorization,让 有没有办法计算不存在循环的相关系数 import numpy as np A = np.ones([n,m]) B = np.ones([o,n,m]) 其中m,n和o用于表示尺寸 不合理的例子: C = corr(A,B) = array([1,o]) 我们可以使用corr2_coeff从重塑输入到2D版本,这样第一个输入被重塑为一列数组,第二个输入的列数与其最后两个轴的组合长度相同,如下所示- from scipy.stats.stats import pearsonr A = n

有没有办法计算不存在循环的相关系数

import numpy as np
A = np.ones([n,m])
B = np.ones([o,n,m])
其中
m
n
o
用于表示尺寸

不合理的例子:

C = corr(A,B) = array([1,o])

我们可以使用
corr2_coeff
从重塑输入到
2D
版本,这样第一个输入被重塑为一列数组,第二个输入的列数与其最后两个轴的组合长度相同,如下所示-

from scipy.stats.stats import pearsonr

A = np.random.random([5,5])
B = np.random.random([3,5,5])
C = []
for i in B:
    C.append(pearsonr(A.flatten(), i.flatten())[0])

C = np.array(C)
In [143]: from scipy.stats.stats import pearsonr
     ...: 
     ...: A = np.random.random([5,5])
     ...: B = np.random.random([3,5,5])
     ...: C = []
     ...: for i in B:
     ...:     C.append(pearsonr(A.flatten(), i.flatten())[0])
     ...: 
     ...: C = np.array(C)
     ...: 

In [144]: C
Out[144]: array([ 0.05637413, -0.26749579, -0.08957621])

In [145]: corr2_coeff(A.reshape(1,-1),B.reshape(B.shape[0],-1)).ravel()
Out[145]: array([ 0.05637413, -0.26749579, -0.08957621])
样本运行-

corr2_coeff(A.reshape(1,-1),B.reshape(B.shape[0],-1)).ravel()
对于真正巨大的阵列,我们可能需要求助于一个循环,就像这样-

from scipy.stats.stats import pearsonr

A = np.random.random([5,5])
B = np.random.random([3,5,5])
C = []
for i in B:
    C.append(pearsonr(A.flatten(), i.flatten())[0])

C = np.array(C)
In [143]: from scipy.stats.stats import pearsonr
     ...: 
     ...: A = np.random.random([5,5])
     ...: B = np.random.random([3,5,5])
     ...: C = []
     ...: for i in B:
     ...:     C.append(pearsonr(A.flatten(), i.flatten())[0])
     ...: 
     ...: C = np.array(C)
     ...: 

In [144]: C
Out[144]: array([ 0.05637413, -0.26749579, -0.08957621])

In [145]: corr2_coeff(A.reshape(1,-1),B.reshape(B.shape[0],-1)).ravel()
Out[145]: array([ 0.05637413, -0.26749579, -0.08957621])

这可能是相关的:。您是否可以添加一个我们可以尝试矢量化的工作循环实现?示例添加了@DivakarDid发布的解决方案为您工作?对于如此庞大的数据集,您需要关注内存优化。因此,对B中的i使用一个循环,如So-
[corr2_coeff(A.reformate(1,-1),i.reformate(1,-1)]
。这应该比你的循环版本要好得多。让我知道,如果这对你有效,我会把它添加到我的帖子中,并完成这个问题。