2013-01-11 200 views
1

我已經需要切片陣列,其中我想零假設爲除了第一每一維當假定用於隨後的尺寸爲零。切片陣列

給定一個數組:

x = numpy.zeros((3,3,3)) 

我想以下行爲,但無需事先知道維數:

y = a[:,0,0] 

基本上我尋找的東西,將採取的Ellipsis的地方,但不是擴展到:對象的需要數量,這將擴展到零的需要數量。

有內置的這個東西嗎?如果不是,獲得我需要的功能的最佳方式是什麼?



編輯:
一種方式做,這是使用方法:

y = x.ravel(0:temp.shape[0]) 

這工作得很好,但在某些情況下(如礦)ravel將需要創建一個副本數組而不是視圖。因爲我正在處理大型數組,所以我想要更高效的內存處理方式。

回答

3

您可以創建一個索引元組,像這樣:

x = arange(3*3*3).reshape(3,3,3) 

s = (slice(None),) + (0,)*(x.ndim-1) 

print x[s] # array([ 0, 9, 18]) 
print x[:,0,0] # array([ 0, 9, 18]) 

我想你也可以這樣做:

x.transpose().flat[:3] 

但我更喜歡第一種方法,因爲它適用於任何尺寸(而而不僅僅是第一個),並且僅僅編寫x[:,0,0]顯然同樣有效,因爲它只是一種不同的語法。

+0

謝謝,這個完美的作品。切片對象就是我所缺少的。在我的情況下,我現在使用's = [0] * x.ndim; s [ii] =切片(無)'。這使我能夠從每個維度拉出我需要的東西。 – amicitas

0

我通常使用tom10的方法,但這裏的另一個:

for i in range(x.ndim-1): 
    x = x[...,0]