【问题标题】:NumPy array slice using None使用 None 的 NumPy 数组切片
【发布时间】:2010-11-27 08:33:14
【问题描述】:

这让我摸不着头脑。我无意中用 None 对数组进行切片,得到的不是错误(我预计会出现错误)。相反,它返回一个具有额外维度的数组。

>>> import numpy
>>> a = numpy.arange(4).reshape(2,2)
>>> a
array([[0, 1],
       [2, 3]])
>>> a[None]
array([[[0, 1],
        [2, 3]]])

这种行为是故意的还是副作用?如果是故意的,有什么理由吗?

【问题讨论】:

  • 有点相关,当我需要将某些内容传递给切片但不想添加额外的维度时,我使用了 slice(None)。
  • a[None] 等价于a[None, :, :]a[None, ...]。与其他索引表达式一样,根据需要添加尾随切片。因此,None 本身在开始时添加了一个新轴。 a[...,None] 在末尾添加新轴。

标签: python arrays numpy


【解决方案1】:

使用 None 等同于使用 numpy.newaxis,所以是的,这是故意的。事实上,它们是一样的,但当然,newaxis 更清楚。

The docs:

newaxis 对象可用于所有切片操作以创建长度为 1 的轴。 newaxis 是“None”的别名,可以使用“None”代替它,结果相同。

A related SO question.

【讨论】:

  • 这是故意的,但合乎逻辑吗?我期待array[None] == array,因为我把它读作“没有应用掩码”。使用array.add_axis()array = np.add_axis(array) 之类的东西也会比array = array[None] 更明确。
猜你喜欢
  • 2017-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-11
  • 2011-08-30
相关资源
最近更新 更多