寻找一种简化的方法来计算数组之间的成对相关性
looking for a simplied approach for calculating pairwise correlation among arrays
我有 n 个长度为 m 的数组,我想在数组之间取成对的 Pearson 相关性,然后取它们的平均值。
数组保存为形状为 (n, m)
的 numpy 数组
一种方法是写“两个for循环操作”。但是,我想知道这可以用更简单的方式写成python吗?
我当前的代码如下所示:
sum_dd = 0
counter_dd = 0
for i in range(len(stc_data_roi)):
for j in range(i+1, len(stc_data_roi)):
sum_dd += np.corrcoef(stc_data_roi[i], stc_data_roi[j])
counter += 1
假设您有 n=4 个长度为 m=5 的数组
n = 4
m = 5
X = np.random.rand(n, m)
print(X)
array([[0.49017121, 0.58751099, 0.87868983, 0.75328938, 0.16491984],
[0.81175397, 0.26486309, 0.42424784, 0.37485824, 0.66667452],
[0.80901099, 0.84121723, 0.36623767, 0.59928036, 0.22773295],
[0.59606777, 0.63301654, 0.30963807, 0.82884099, 0.95136045]])
现在转置数组并转换为数据帧。数据帧的每一列代表一个数组,然后使用 pandas corr 函数。
df = pd.DataFrame(X.T)
corr_coef = df.corr(method="pearson")
print(corr_coef)
corr_coef 的每一列将代表与其他数组的相关系数,包括它本身(它将是一个)。
#sum of relevant coefficients as per your code
#Subtract by 4 because we don't want self correlation
#Divide by 2 becasue we are adding twice
corr_coef_sum = (corr_coef.sum().sum() - n) / 2
corr_coef_avg = corr_coef_sum / 6 #Total 6 combination in our example case
我有 n 个长度为 m 的数组,我想在数组之间取成对的 Pearson 相关性,然后取它们的平均值。
数组保存为形状为 (n, m)
一种方法是写“两个for循环操作”。但是,我想知道这可以用更简单的方式写成python吗?
我当前的代码如下所示:
sum_dd = 0
counter_dd = 0
for i in range(len(stc_data_roi)):
for j in range(i+1, len(stc_data_roi)):
sum_dd += np.corrcoef(stc_data_roi[i], stc_data_roi[j])
counter += 1
假设您有 n=4 个长度为 m=5 的数组
n = 4
m = 5
X = np.random.rand(n, m)
print(X)
array([[0.49017121, 0.58751099, 0.87868983, 0.75328938, 0.16491984],
[0.81175397, 0.26486309, 0.42424784, 0.37485824, 0.66667452],
[0.80901099, 0.84121723, 0.36623767, 0.59928036, 0.22773295],
[0.59606777, 0.63301654, 0.30963807, 0.82884099, 0.95136045]])
现在转置数组并转换为数据帧。数据帧的每一列代表一个数组,然后使用 pandas corr 函数。
df = pd.DataFrame(X.T)
corr_coef = df.corr(method="pearson")
print(corr_coef)
corr_coef 的每一列将代表与其他数组的相关系数,包括它本身(它将是一个)。
#sum of relevant coefficients as per your code
#Subtract by 4 because we don't want self correlation
#Divide by 2 becasue we are adding twice
corr_coef_sum = (corr_coef.sum().sum() - n) / 2
corr_coef_avg = corr_coef_sum / 6 #Total 6 combination in our example case