【问题标题】:Colon, None, slice(None) in numpy array indexersnumpy 数组索引器中的冒号、无、切片(无)
【发布时间】:2016-11-07 14:02:09
【问题描述】:

至于a = np.arange(24).reshape(2,3,4)

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

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

能解释一下后者吗?

【问题讨论】:

  • @GWW 不,它没有!
  • 我的版本2.7.12 |Anaconda 2.3.0 (64-bit)。我再次确认a[0,None,1]。对于那些投反对票的人,你能给一些 cmets 吗?
  • 你期待什么?
  • 哦,我的错误对不起。我在行尾复制并粘贴逗号,将a 转换为元组。
  • @BrenBarn 我期待a[0,None,1] 输出二维数组的原因。看起来很有线......

标签: python numpy indexing


【解决方案1】:

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

在你的情况下:

  • a[0,None,1] 类似于[0,np.newaxis,1],因此输出
  • slice(None) 就像“无切片”,这就是为什么a[0,:,1]a[0,slice(None),1] 相同。请参阅 numpy 的 Indexing 文档。

【讨论】:

  • np.newaxis 确实很有意义,我忽略了它相当于None...
  • 是的。关于 BrenBarn 对摩西回答的评论:令人惊讶的结果来自结合切片和None。 - a[0,1,None] = a[0,1,:][None] = array([[4, 5, 6, 7]]) - `a[0,None,1] = a[0, None][:,1] = array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7] , [ 8, 9, 10, 11]]])[:,1] = array([[4, 5, 6, 7]])
  • 很抱歉,我无法直接评论摩西的回答。我没有足够的声誉来发表评论。
【解决方案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]])

【讨论】:

  • 令人惊讶的是 None 的位置不相关,因为文档说:“添加的维度是 newaxis 对象在选择元组中的位置”。
  • @BrenBarn 在比这更复杂的索引(返回多维数组)中,也许它会,但由于这返回一个平面数组,每个None 只是添加一个新的[]跨度>
  • 我明白了,a[0,1]a[0,1,:] 一样
猜你喜欢
  • 1970-01-01
  • 2020-12-17
  • 2017-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多