复制三维数组的所有其他元素

时间:2017-03-16 01:13:51

标签: python-2.7 numpy netcdf netcdf4

我有一个来自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) 这只是第一个维度

1 个答案:

答案 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的切片元组相同。