在numpy中,可以使用切片语法中的'newaxis'对象创建长度为1的轴,例如:
import numpy as np
print np.zeros((3,5))[:,np.newaxis,:].shape
# shape will be (3,1,5)
该文档的状态是一个也可以用None
代替newaxis
,效果是完全一样的。
有什么理由选择一个?是否有一般偏好或样式指南?我的印象是newaxis
更受欢迎,可能是因为它更明确。那么,有什么理由None
允许这样做?
Answers:
None
之所以被允许,numpy.newaxis
是因为它仅仅是的别名None
。
In [1]: import numpy
In [2]: numpy.newaxis is None
Out[2]: True
作者之所以选择它,是因为他们需要一个方便的常量并且None
可用。
至于为什么你应该更喜欢newaxis
过None
:主要是因为它更明确,部分是因为某一天的numpy
作者可能将其更改为比其他的东西None
。(他们没有计划也可能没有计划,但是没有充分的理由选择None
。)
None
优化执行速度是一个更好的地方,它可以带来很小的时间收益。但是通常您应该更喜欢np.newaxis
。
newaxis = object()
(或C级等效标准),这超出了我的范围...使用None
非常容易出错。我有一个带有错误的函数(return
应该返回一个布尔数组的裸露错误),并且由于形状不匹配而开始出现错误。让我花了一会儿时间才意识到用进行索引None
并不会简单地引发一个IndexError
。如果他们使用了“新鲜的”前哨值,我会避免尝试