我猜你用的是NOAA OISST数据,尽管我不认为这对这里的答案有什么影响。
注意你的循环,
For I in range(len(lat)): For j in range(len(lon)): For m in range(len(lat)): For n in range(len(lon)):
会生成索引,
I = 0,…, 8 j = 0,…31岁的m = 0, ..., 8 n = 0, ..., 31
将全局SST数组子集sst5 (59:90, i, j)
而且sst5 (59:90, m, n)
你不是在从你的热带点提取数据纬度
而且朗
变量,你只是从角落里提取数据满,全球数组,我.这e。Sst5 [:, 0:8, 0:31]
.你可以通过打印出来看到这一点sst5.shape
在循环中,会显示,
...(365, 720, 1440)(365, 720, 1440)(365, 720, 1440)(365, 720, 1440)…
这个角落是在南极洲,因此没有海温数据和numpy.corrcoef
将只看到缺失的数据值,并试图除以零协方差,产生NaN值。当发生这种情况时,我的Numpy会发出以下警告:
RuntimeWarning:在true_divide c /= stddev[:,无]中遇到的无效值
我猜你可以提取出来您可以将程序修改为子集的你想要的点变成一个有形状的数组(NTIME NPOINTS)sst5
循环之前的数组:
sst5_子集= sst5[59:90, 210:510:35,::45]
而且调用np.ma.corrcoef
在那一次然后引用循环中的这个数组:
mar_05.append (np。corrcoef (sst5_subset (:, i, j), sst5_subset (:, m, n)) [0,1])
但就我个人而言,我会去掉循环,这样做作为一个整体数组也参与操作,而不是使用所有这些嵌套循环。:
Sst_array = sst5_子集。形状[0],1)。T corr = np.ma.corrcoef(sst_array)