Python中的Pearson相关矩阵,ValueError

时间:2019-04-09 16:30:45

标签: python python-3.x correlation python-xarray pearson

我正在尝试获取一个矩阵(纬度,经度),每个网格点的皮尔逊系数值为

x:3D DataArray(时间,纬度,经度)(时间大小为30)

y:内部有30个值序列的DataArray列向量

所以我想为x包含30个元素的列向量计算每个(纬度,经度)的皮尔逊系数。

我尝试过:

corrmap = xr.DataArray(x2)
for i in range(len(corrmap['lat']))
     for j in range(len(corrmap['lon']))
          corrmap[i, j], p_value = pearsonr(x[:, i, j], y)

但是我得到这个错误:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我无法完全理解其含义。我的方法不正确吗?我应该使用其他类型的代码来解决我的问题吗?

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

问题是您使用的是y,它有两个维度,pearsonr无法处理。指定y[:,0]即可使用。那就是:

corrmap = np.zeros(((len(corrmap['lat']), len(corrmap['lon'])))

for i in range(len(corrmap['lat'])):
     for j in range(len(corrmap['lon'])):
          corrmap[i, j], p_value = pearsonr(x[:, i, j], y[:,0])

我也将使用一个numpy数组代替xarray,至少要获取值,然后可以将其转换为xarray。

答案 1 :(得分:0)

假设您正在使用scipy.stats.pearsonr。 PearsonR的参数应为一维数组。

因此,请转到:

corrmap[i, j], p_value = pearsonr(x[:, i, j].ravel(), y)

ravel()的作用是返回连续的展平数组, Numpy ravel()

关于您遇到的错误evaluate array in boolean context,这里还有一些上下文。换句话说,额外的维数可能会导致某些操作应用于数组而不是标量。 此问题与您的问题具有相同的性质:SO: PearsonR ValueError

答案 2 :(得分:0)

您可以使用以下方法计算皮尔逊相关系数:

import numpy
numpy.corrcoef(list1, list2)[0, 1]