2017-03-16 112 views
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() 

,但它不工作,因为打印zeta​​_pck.shape的输出(100,52,52) 即走的是第一维唯一

回答

2

你需要沿着索引所有尺寸:

zeta_pck = data.variables['zeta'][::2, ...] 

以切片符号表示的...对象Ellipsis相当于对所有其余维度做:。写上面的另一种方式是

zeta_pck = data.variables['zeta'][::2, :, :] 

的主要区别是,第二个版本只适用于三维阵列,而第一个版本适用于所有方面,包括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