Python 中的 Pearson 相关矩阵,ValueError

我试图得到一个矩阵,(纬度,经度)大小,每个网格点的皮尔逊系数值,对于


x : 一个 3D DataArray (time, lat, lon) (时间大小是 30)


y : 一个 DataArray 列向量,里面有 30 个值系列


因此,我想为 x 的 30 个元素的列向量计算每个 (lat,lon) 的皮尔逊系数。


我试过:


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()

我无法完全理解其中的含义。我的方法不正确吗?我应该使用其他类型的代码来解决我的问题吗?


任何帮助将不胜感激。


弑天下
浏览 352回答 3
3回答

心有法竹

问题是你正在使用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。

慕的地8271018

您可以使用以下方法计算Pearson 相关系数:import numpy numpy.corrcoef(list1, list2)[0, 1]

Helenr

假设您正在使用scipy.stats.pearsonr。PearsonR 的参数应该是一维数组。因此,请访问:corrmap[i, j], p_value = pearsonr(x[:, i, j].ravel(), y)ravel() 所做的是返回连续的扁平数组, Numpy ravel()这里还有一些关于你得到的错误的上下文,在 boolean context 中评估数组。换句话说,额外的维度可能导致某些操作应用于数组而不是标量。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python