相关疑难解决方法(0)

如何在Matlab中的多维数组中应用corr2函数?

假设我有两个矩阵A和B.

A = rand(4,5,3);
B = rand(4,5,6)
Run Code Online (Sandbox Code Playgroud)

我想应用函数'corr2'来计算相关系数.

corr2(A(:,:,1),B(:,:,1))
corr2(A(:,:,1),B(:,:,2))
corr2(A(:,:,1),B(:,:,3))
...
corr2(A(:,:,1),B(:,:,6))
...
corr2(A(:,:,2),B(:,:,1))
corr2(A(:,:,2),B(:,:,2))
...
corr2(A(:,:,3),B(:,:,6))
Run Code Online (Sandbox Code Playgroud)

如何避免使用循环来创建这样的矢量化?

matlab vectorization multidimensional-array

6
推荐指数
1
解决办法
1216
查看次数

2 个时间相关的多维信号(信号向量)的相关性

我有一个矩阵 M1 ,其中每一行都是一个与时间相关的信号。

我还有另一个相同维度的矩阵 M2,其每一行也是一个时间相关信号,用作“模板”,用于识别第一个矩阵中的信号形状。

我想要一个列向量 v,其中 v [i] 是 M1 第 i 行和 M2 第 i 行之间的相关性。

我研究了 numpy 的 corrcoef 函数并尝试了以下代码:

import numpy as np

M1 = np.array ([
    [1, 2, 3, 4],
    [2, 3, 1, 4]
])

M2 = np.array ([
    [10, 20, 30, 40],
    [20, 30, 10, 40]
])

print (np.corrcoef (M1, M2))
Run Code Online (Sandbox Code Playgroud)

打印:

[[ 1.   0.4  1.   0.4]
 [ 0.4  1.   0.4  1. ]
 [ 1.   0.4  1.   0.4]
 [ 0.4  1.   0.4  1. ]] …
Run Code Online (Sandbox Code Playgroud)

python numpy

5
推荐指数
1
解决办法
2077
查看次数

Python中成对相关的优化计算

给定一组离散位置(例如"站点"),它们以某些分类方式(例如一般接近度)成对相关并且包含局部级别数据(例如,种群大小),我希望有效地计算本地级别数据之间的平均相关系数.成对位置以相同的关系为特征.

例如,我假设100个站点并使用值1到25随机化它们的成对关系,产生三角矩阵relations:

import numpy as np

sites = 100
categ = 25

relations = np.random.randint(low=1, high=categ+1, size=(sites, sites))
relations = np.triu(relations) # set relation_ij = relation_ji
np.fill_diagonal(relations, 0) # ignore self-relation
Run Code Online (Sandbox Code Playgroud)

我还在每个站点上复制了5000个模拟结果:

sims = 5000
res = np.round(np.random.rand(sites, sims),1)
Run Code Online (Sandbox Code Playgroud)

要计算每个特定关系类别的平均成对相关,我首先计算出每个类别相关i,相关系数rho[j]的模拟结果之间的res每一个独特的网站对j,然后采取所有可能的对平均有关系i:

rho_list = np.ones(categ)*99

for i in range(1, categ+1):
    idr = np.transpose(np.where(relations == i)) # pairwise site indices of the same relation category
    comp = np.vstack([res[idr[:,0]].ravel(), res[idr[:,1]].ravel()]) …
Run Code Online (Sandbox Code Playgroud)

python arrays optimization numpy correlation

4
推荐指数
1
解决办法
487
查看次数

理解两个不同大小矩阵的 np.corrcoef 输出

我想计算每个之间的相关列向量矩阵的与每个列向量矩阵的

考虑:

vectorsize = 777 
A = np.random.rand(vectorsize, 64)
B = np.random.rand(vectorsize, 36)
corr = np.corrcoef(A, B, rowvar=False)
Run Code Online (Sandbox Code Playgroud)

np.corrcoef在这种情况下,的输出将是一个 100x100 的矩阵。这是什么意思?

直觉上我希望得到一个 64x36 的矩阵。

python numpy correlation

3
推荐指数
1
解决办法
5759
查看次数

查找列表内列表之间相关性的效率问题

如果我有两个小列表并且我想找到list1中的每个列表与list2 中的每个列表之间的相关性,我可以这样做

from scipy.stats import pearsonr

list1 = [[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
list2 = [[10,20,30],[40,50,60],[77,78,79],[80,78,56]]

corrVal = []
for i in list1:
    for j in list2:
        corrVal.append(pearsonr(i,j)[0])

print(corrVal)

OUTPUT: [1.0, 1.0, 1.0, -0.90112711377916588, 1.0, 1.0, 1.0, -0.90112711377916588, 1.0, 1.0, 1.0, -0.90112711377916588, 1.0, 1.0, 1.0, -0.90112711377916588]
Run Code Online (Sandbox Code Playgroud)

效果很好……差不多。(编辑:刚刚注意到我上面的相关输出似乎给出了正确的答案,但它们重复了 4 次。不确定为什么这样做)

但是,对于列表中包含 1000 个值的较大数据集,我的代码无限期冻结,不输出任何错误,因此我每次都强制退出我的 IDE。我在这里滑倒的任何想法?不确定 pearsonr 函数可以处理的数量是否存在固有限制,或者我的编码是否导致了问题。

python scipy correlation

2
推荐指数
1
解决办法
415
查看次数