NumPy数组切片使用None

84

这让我头疼了一段时间。我无意中使用 None 对一个数组进行切片,结果没有得到错误(我本来期望会报错)。相反,它返回了一个额外维度的数组。

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

这种行为是有意为之还是副作用?如果是故意的,是否有一些理论依据?


1
有些相关,当我需要传递一些内容到切片中但又不想添加额外的维度时,我会使用slice(None)。 - Tahlor
2
a[None] 等同于 a[None, :, :]a[None, ...]。与其他索引表达式一样,必要时会添加尾随切片。因此,单独的 None 会在开头添加一个新轴。a[..., None] 则在末尾添加新轴。 - hpaulj
1个回答

84

使用None等同于使用numpy.newaxis,所以是有意的。实际上,它们是相同的东西,但是,当然,newaxis更好地解释了它。

文档

newaxis对象可用于所有切片操作中创建长度为1的轴。newaxis是“None”的别名,“None”可以在其位置上使用并产生相同的结果。

一个相关的SO问题


2
这是有意为之的,但是它是否合乎逻辑呢?我会期望 array[None] == array,因为我理解它为“没有应用掩码”。使用类似于 array.add_axis()array = np.add_axis(array)array = array[None] 更明确。 - Guimoute

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接