2010-04-14 168 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