【问题标题】:Correlation of columns of two arrays in pythonpython中两个数组的列的相关性
【发布时间】:2022-01-12 21:34:34
【问题描述】:

我有两个数组:900x421 和 900x147。我需要关联这些数组中的所有列,以便输出为 421x147。在 Matlab 函数 corr() 中可以做到这一点,但我在 python 中找不到相同的函数。

【问题讨论】:

  • 你看到了吗:numpy.corrcoef
  • 是的,但它给出了一个错误:all the input array dimensions for the concatenation axis must match exactly, but along dimension 1, the array at index 0 has size 421 and the array at index 1 has size 147
  • 转置输入
  • 它给出了同样的错误
  • 如果两个输入都被转置,我会得到一个形状为568的数组,但我需要一个421x147的数组

标签: python arrays correlation


【解决方案1】:

numpy.corrcoef 函数是要走的路。您需要两个参数 xy 具有相同的形状。您可以通过连接两个数组来做到这一点。假设arr1 的形状为 900x421,arr2 的形状为 900x147。您可以执行以下操作

import numpy as np
two_arrays = np.concatenate((arr1, arr2), axis=1) # 900x568
corr = np.corrcoef(two_arrays.T) # 568x568 array
desired_output = corr[0:421, 421:]

np.corrcoef 将每一行视为一个变量,将每一列视为观察值。这就是我们需要转置数组的原因。

【讨论】:

  • 非常感谢!但不幸的是,你的建议不起作用。结果 corr 是 900x900,desired_output 是一个形状为 900x0 的空数组。此外,由于我生成的数组将具有不同大小的硬编码,因此大小对我来说并不适用。我正在尝试提出一个在每列上都有循环的解决方案,但它似乎不是最理想的
  • 你是对的。我编辑了我的代码来解决这个问题并对其进行了测试。对于不断变化的数组大小,您可以将数值替换为 arr1.shape[1] 之类的内容,例如获取 421 值。
  • 但是为什么我应该选择前 421 个值而不是最后一个 421,或者从中间选择 421?这似乎很随意,但我需要一个数组中的 421 列与另一个数组的另外 147 个值相关
  • 因为我将第二个数组arr2 连接到第一个数组arr1。 Numpy 按照您将数组传递给np.concatenate 的顺序添加数组。所以two_arrays的前421列对应arr1的列。
  • 好的。非常感谢!
猜你喜欢
  • 2013-02-07
  • 2022-08-11
  • 1970-01-01
  • 1970-01-01
  • 2014-03-22
  • 2020-02-08
  • 1970-01-01
  • 2019-03-16
  • 2020-01-04
相关资源
最近更新 更多