我正在尝试获取一个矩阵(纬度,经度),每个网格点的皮尔逊系数值为
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()
我无法完全理解其含义。我的方法不正确吗?我应该使用其他类型的代码来解决我的问题吗?
任何帮助将不胜感激。
答案 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]