我想把时间序列(540个月长)对应于每一个网格盒,在两个纬度上循环x 6经度=12个网格盒。我设法得到了相关系数,但p值最终被证明是"nan“,尽管它们不应该。
关于我数据的信息:
我试过:
np.corrcoef(TheData1[gotdata,lt,ln],TheData2[gotdata,lt,ln])[0,1]
可以很好地得到相关系数,但对于p值则不行.slope,intercept,r_value,p_value,std_err=scipy.stats.linregress(TheData1[gotdata,lt,ln],TheData2[gotdata,lt,ln])
给了pvalue=nan。scipy.stats.pearsonr(TheData1[gotdata,lt,ln],TheData2[gotdata,lt,ln])
给出了错误"ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()“
TheMDI代表-1e30,缺少数据。
代码:
for lt in range(NLats): # range nlats goes through 0...36
for ln in range(NLons): # range nlons goes through 0...72
# Short way
# create a map pointing to the elements of the array that are non-missing
gotdata = np.where((TheData1[:,lt,ln] > TheMDI) & (TheData2[:,lt,ln] > TheMDI))
OutputData[lt,ln] = np.corrcoef(TheData1[gotdata,lt,ln]/np.std(TheData1[gotdata,lt,ln]),TheData2[gotdata,lt,ln]/np.std(TheData2[gotdata,lt,ln]))[0,1]
OutputDataSig[lt,ln]=scipy.stats.linregress(TheData1[gotdata,lt,ln],TheData2[gotdata,lt,ln])[3]
发布于 2019-09-09 00:01:54
只选择gotdata数据的第一个条目()就可以解决问题:
gotdata = np.where((TheData1[:,lt,ln] > TheMDI) & (TheData2[:,lt,ln] > TheMDI))[0]
这使得scipy.stats.pearsonr给出了一个p值.
https://stackoverflow.com/questions/57778278
复制相似问题