Python 我应该使用newaxis还是不使用?

Python 我应该使用newaxis还是不使用?,python,numpy,Python,Numpy,在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吗?None是允许的,因为numpy.ne

在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
吗?

None
是允许的,因为
numpy.newaxis
只是
None
的别名

In [1]: import numpy

In [2]: numpy.newaxis is None
Out[2]: True
作者选择它可能是因为他们需要一个方便的常数,
None


至于为什么你更喜欢
newaxis
而不是
None
:主要是因为它更明确,部分是因为有一天
numpy
作者可能会将其更改为
None
以外的内容。(他们不打算,也可能不会,但没有理由选择
None

谢谢,我没有注意到np.newaxis实际上是None。我将使用newaxis。他们实际上说你可以使用None,但是,他们现在不能更改它:“newaxis对象可以在上面讨论的基本切片语法中使用。None也可以代替newaxis使用。”此外,如果您与不熟悉numpy索引细节的人一起工作,当他们看到数组被“无”解引用时,他们似乎会发疯。
None
更好的地方是优化执行速度,它可以带来非常小的时间效益。但通常你应该更喜欢
np.newaxis
。他们为什么不使用
newaxis=object()
(或C级等效物)我无法理解。。。使用
None
非常容易出错。我有一个函数有一个bug(一个本来应该返回布尔数组的裸
return
),由于形状不匹配,我开始出现错误。我花了一段时间才意识到使用
None
进行索引并不会简单地引发
索引错误。如果他们使用了一个“新的”哨兵值,我就可以避免30分钟试图理解错误。。。