我有一些netCDF文件,每个方向(x
,y
,z
)和24与不同时间的值。在最后一点,我必须绘制所有时间步骤的数据。如何连接多个netCDF文件与Python的数据
对于绘图我需要插入特定点,所以我必须知道最近的邻居。我的计划是将数据分成三维单元格,因此我不必在整个数据集中搜索最近的邻居。
所以在我的第一步中,我读了我的数据文件,并创建一个数组女巫包含每个点的坐标和每次的值。
之后我计算每个点的小区属于并将其追加到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]
当我只需要一个时间步它的工作,但我有一个大的过载,如果我重新计算单元和每个时间步最近的邻居,并且他们不会随时间改变位置。
它不是你的问题,但你为什么不使用scipy.spatial.cKDTree,你似乎重新发明了轮子?另外scipy.ndimage有一些插值可能已经做到了你想要的。尽管如此,最简单的解决方案就是创建一个已经足够容纳_everything_的大数组。 – seberg