在python中关联网格数据集

2024-05-19 19:28:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个月的全球网格数据集液态水当量厚度的格式(时间,纬度,伦敦)。两者具有相同的空间和时间分辨率。我想把它们关联起来,但是numpy.corrcoef()只适用于2D数组,而不是3D数组。 所以我想把两个变量在整个时间序列中的同一个网格点(x,y)关联起来。事实上,我想要一个新的nc文件与网格的相关系数。在

import numpy as np
from netCDF4 import dataset

wdir  = '.../Data/'

# read GRACE NCs
GRACE_GFZ = Dataset(wdir+'GRACE/GRCTellus.GFZ.200204_201607.nc','r')
GRACE_JPL = Dataset(wdir+'GRACE/GRCTellus.JPL.200204_201607.nc','r')

两个变量(gfz和jpl)在相同的位置有相同数量的缺失值。在

^{pr2}$

由于它们具有相同的时间和空间分辨率,因此时间、经度和纬度可以同时用于两者。在

time = GRACE_GFZ.variables['time'][:]
lons = GRACE_GFZ.variables['lon'][:]
lats = GRACE_GFZ.variables['lat'][:]
gfz = GRACE_GFZ.variables['lwe_thickness'][:]
jpl = GRACE_JPL.variables['lwe_thickness'][:]

这里我要穿过网格,把corrcoef放入一个数组中。这给了我一堆2x2矩阵。在

test = []
for x in range(len(lats)):
   for y in range(len(lons)):
      print(np.corrcoef(gfz[:,x,y],jpl[:,x,y]))

如何将每个点的corrcoef放入正确位置的新数组中?在


Tags: numpy网格时间分辨率空间数组variablesjpl
1条回答
网友
1楼 · 发布于 2024-05-19 19:28:58

我克服了以下问题:

temp =[]
corrcoefMatrix_gfzjpl = [[0 for i in range(len(lons))] for j in range(len(lats))] 
for x in range(len(lats)):
    for y in range(len(lons)):
        temp = np.corrcoef(gfz[:,x,y],jpl[:,x,y])
        corrcoefMatrix_gfzjpl[x][y] = temp[0,1]

corrcoefMatrix_gfzjpl = np.squeeze(np.asarray(corrcoefMatrix_gfzjpl))

基本上,我做了一个包含零的矩阵,并用corrcoef矩阵中的相关系数值替换它们。我对每一个网格单元都做了这个,每个网格单元都有一个for循环。 之后,我创建了一个新的netcdf文件,定义了所有的维度和变量。在

^{pr2}$

欢迎提出改进建议!在

相关问题 更多 >