这让我头疼了一段时间。我无意中使用 None 对一个数组进行切片,结果没有得到错误(我本来期望会报错)。相反,它返回了一个额外维度的数组。>>> import numpy >>> a = numpy.arange(4).reshape(2,2) >>> a array([[0, 1], [2, 3]]) >>> a[None] array([[[0, 1], [2, 3]]]) 这种行为是有意为之还是副作用?如果是故意的,是否有一些理论依据?
使用None等同于使用numpy.newaxis,所以是有意的。实际上,它们是相同的东西,但是,当然,newaxis更好地解释了它。 文档: newaxis对象可用于所有切片操作中创建长度为1的轴。newaxis是“None”的别名,“None”可以在其位置上使用并产生相同的结果。 一个相关的SO问题。
a[None]
等同于a[None, :, :]
或a[None, ...]
。与其他索引表达式一样,必要时会添加尾随切片。因此,单独的None
会在开头添加一个新轴。a[..., None]
则在末尾添加新轴。 - hpaulj