2010-04-14 177 views
7

我有一個三維陣列,a,形狀的說a.shape = (10, 10, 10)保留一個切片的尺寸從numpy的3D陣列

切片時,將尺寸爲squeezed自動即

a[:,:,5].shape = (10, 10)

I」 d要保留尺寸的數量,但也要確保被擠壓的尺寸是顯示1的尺寸,即

a[:,:,5].shape = (10, 10, 1)

我曾經想過重新鑄造陣列和傳遞ndmin,但只是增加了額外的尺寸形狀元組的開始,無論片從陣列中a原來的地方。

回答

12
a[:,:,[5]].shape 
# (10,10,1) 

a[:,:,5]basic slicing一個例子。

a[:,:,[5]]integer array indexing的一個例子 - combined with basic slicing。使用整數數組索引時,生成的形狀始終爲​​。由於[5](作爲陣列)具有形狀(1,)a[:,:,[5]]最終形狀(10,10,1)

+0

謝謝,但是我應該補充說我正在實現'__getitem__'方法,所以我不願意改變切片參數 - 請參閱編輯 – Brendan 2010-04-14 18:58:31

+1

numpy的索引規則足夠複雜。創建一個修改這些規則的'__getitem__'可能會造成麻煩。要求對象的用戶瞭解numpy的規則並傳遞正確的索引不是更好嗎? – unutbu 2010-04-14 19:05:11

+0

非常好,你能介紹一下解釋這種行爲的numpy文檔嗎? – 2015-06-23 07:07:10