为了账号安全,请及时绑定邮箱和手机立即绑定

Python 中的 Pearson 相关矩阵,ValueError

Python 中的 Pearson 相关矩阵,ValueError

弑天下 2022-01-05 10:47:07
我试图得到一个矩阵,(纬度,经度)大小,每个网格点的皮尔逊系数值,对于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()我无法完全理解其中的含义。我的方法不正确吗?我应该使用其他类型的代码来解决我的问题吗?任何帮助将不胜感激。
查看完整描述

3 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

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


查看完整回答
反对 回复 2022-01-05
?
慕的地8271018

TA贡献1796条经验 获得超4个赞

您可以使用以下方法计算Pearson 相关系数:

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


查看完整回答
反对 回复 2022-01-05
?
Helenr

TA贡献1780条经验 获得超3个赞

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

因此,请访问:

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

ravel() 所做的是返回连续的扁平数组, Numpy ravel()

这里还有一些关于你得到的错误的上下文,在 boolean context 中评估数组。换句话说,额外的维度可能导致某些操作应用于数组而不是标量。


查看完整回答
反对 回复 2022-01-05
  • 3 回答
  • 0 关注
  • 349 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信