我试图得到一个矩阵,(纬度,经度)大小,每个网格点的皮尔逊系数值,对于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。
慕的地8271018
TA贡献1796条经验 获得超4个赞
您可以使用以下方法计算Pearson 相关系数:
import numpy numpy.corrcoef(list1, list2)[0, 1]
Helenr
TA贡献1780条经验 获得超3个赞
假设您正在使用scipy.stats.pearsonr。PearsonR 的参数应该是一维数组。
因此,请访问:
corrmap[i, j], p_value = pearsonr(x[:, i, j].ravel(), y)
ravel() 所做的是返回连续的扁平数组, Numpy ravel()
这里还有一些关于你得到的错误的上下文,在 boolean context 中评估数组。换句话说,额外的维度可能导致某些操作应用于数组而不是标量。
添加回答
举报
0/150
提交
取消