我有一个来自netCDF文件的对象,其中包含以下属性:
float32 zeta(time, y, x)
long_name: free surface height
units: meter
unlimited dimensions: time
current shape = (200, 52, 52)
filling off
)
我需要通过在Python中读取其中的每个其他元素来减少此元素。我试过
temp = data.variables['zeta']
zeta_pck = temp[::2].copy()
但它不起作用,因为print zeta_pck.shape的输出是(100,52,52)
这只是第一个维度
答案 0 :(得分:2)
您需要在所有维度上编制索引:
zeta_pck = data.variables['zeta'][::2, ...]
Ellipsis
对象(由切片表示法中的...
表示)相当于对所有剩余维度执行:
。写上述内容的另一种方法是
zeta_pck = data.variables['zeta'][::2, :, :]
主要区别在于第二个版本仅适用于3D阵列,而第一个版本适用于所有维度,包括1个。
如果出于某种原因需要沿所有维度进行子集化,请执行
zeta_pck = data.variables['zeta'][::2, ::2, ::2]
使用索引::2
表示slice
内置对象这一事实,可以为任意数量的维度重写此内容。你可以这样做
temp = data.variables['zeta']
index = (slice(None, None, 2),) * temp.ndim
zeta_pck = temp[index]
此处的索引与上一版本中::2, ::2, ::2
的切片元组相同。