2016-07-05 70 views
4

至于a = np.arange(24).reshape(2,3,4)科隆,无,切片(无)在numpy的数组索引

a[0,:,1]a[0,slice(None),1]输出array([1, 5, 9])

a[0,None,1]给出array([[4, 5, 6, 7]])

可能某人解释后者?

+0

@GWW不,它不! – Meitham

+0

我的版本2.7.12 | Anaconda 2.3.0(64位)'。我再次确认'a [0,None,1]'。对于那些沮丧的家伙,你能提出一些意见吗? – Lee

+0

你在期待什么? – BrenBarn

回答

6

使用原始None(不在slice中)与使用np.newaxis相同,它只是一个别名。

你的情况:

  • a[0,None,1]就像一个[0,np.newaxis,1],因此输出
  • slice(None)就像是 “切片一无所有”,这就是为什么a[0,:,1]相同a[0,slice(None),1]。查看numpy的Indexing文档。
+0

'np.newaxis'是字面上有意义的,我忽略它相当于'None' ... – Lee

+0

是的。关于BrenBarn评论摩西的回答:令人惊讶的结果来自切片和“无”的结合。 '0 [0,1,无] = a [0,1,:] [无] =数组([[4,5,6,7]])' - 'a [ = a [0,None] [:, 1] = array([[[0,1,2,3], [4,5,6,7], [8,9,10,11]]] )[:, 1] = array([[4,5,6,7]]) – Tttt1228

+0

对不起,我不能直接评论摩西的答案。我没有足够的声望发表评论。 – Tttt1228

2

a[0,None,1]相同a[0, 1]但在结果的额外轴线。

newaxis对象可以在所有的限幅操作被用来创建长度之一的 轴线。 :const: newaxis‘None’的别名,并且‘None’ 可用于替代此结果。

所以a[0,None,1]相同a[0,np.newaxis,1]

在这种情况下,其中None放置不相关的,但每None增加了一个新的轴。

>>> a[0,None, 1] 
array([[4, 5, 6, 7]]) 
>>> a[None,None,0,1] 
array([[[4, 5, 6, 7]]]) 
>>> a[0,np.newaxis,1] 
array([[4, 5, 6, 7]]) 
+0

明白了。而“无”对谷歌来说真的不是一个好关键词...... – Lee

+0

有时,你必须直接看文档:)) –

+0

令人惊讶的是,None的位置并不相关,因为文档说:“添加的维度是选择元组中的newaxis对象的位置”。 – BrenBarn