0

我有一个来自 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) 仅采用第一个维度

4

1 回答 1

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此处的索引与之前版本中使用的切片元组相同。

于 2017-03-16T01:19:40.943 回答