2017-03-16 179 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