我有一些 netCDF 文件,每个方向 ( x
, y
, z
) 有 24 个,24 个具有不同时间的值。在最后一点,我必须绘制所有时间步的数据。
对于绘图,我需要在特定点进行插值,所以我必须知道最近的邻居。我的计划是将数据分成 3D 单元格,这样我就不必在整个数据集中搜索最近的邻居。
所以在我的第一步中,我读入了我的数据文件并创建了一个包含[x,y,z,v[:]]
每个点的坐标和每次值的数组。
之后,我为每个点计算它所属的单元格,并将其附加到 4 维数组:x
、y
和:z
v
for vec in vecs:
x_ind = int((vec[0]-xmin) / stepWidthX)
y_ind = int((vec[1]-ymin) / stepWidthY)
z_ind = int((vec[2]-zmin) / stepWidthZ)
if x_ind==gridPointsInXdirection:
x_ind = x_ind-1
if y_ind==gridPointsInYdirection:
y_ind = y_ind-1
if z_ind==gridPointsInZdirection:
z_ind = z_ind-1
#print z_ind, y_ind,x_ind
XGridPoints[z_ind, y_ind, x_ind] = np.append(XGridPoints[z_ind, y_ind, x_ind], vec[0])
YGridPoints[z_ind, y_ind, x_ind] = np.append(YGridPoints[z_ind, y_ind, x_ind], vec[1])
ZGridPoints[z_ind, y_ind, x_ind] = np.append(ZGridPoints[z_ind, y_ind, x_ind], vec[2])
VGridPoints[z_ind, y_ind, x_ind] = np.append(VGridPoints[z_ind, y_ind, x_ind], vec[3])
vecs
包含所有数据点的数组在哪里。到目前为止它正在工作,但我现在的问题在于VGridPoints
:我有一长串值而不是数组列表。是否有将数组附加到数组元素的解决方案,以便我以后可以访问它,例如:
x = XGridPoints[2,3,4][2]
y = YGridPoints[2,3,4][2]
z = ZGridPoints[2,3,4][2]
v[:] = VGridPoints[2,3,4][2]
当我只采取一个时间步时,它正在工作,但是如果我为每个时间步重新计算单元格和最近的邻居并且它们不会随着时间的推移改变位置,我会有很大的过载。