numpy:我应该使用newaxis还是None?


91

在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:


103

None之所以被允许,numpy.newaxis是因为它仅仅是的别名None

In [1]: import numpy

In [2]: numpy.newaxis is None
Out[2]: True

作者之所以选择它,是因为他们需要一个方便的常量并且None可用。

至于为什么你应该更喜欢newaxisNone:主要是因为它更明确,部分是因为某一天的numpy作者可能将其更改为比其他的东西None。(他们没有计划也可能没有计划,但是没有充分的理由选择None。)


谢谢,我没有注意到np.newaxis实际上是None。那我就和newaxis一起去。
nikow

7
他们实际上说您可以使用None,所以现在不能更改它:“ newaxis对象可以在上面讨论的基本切片语法中使用。也不能使用newaxis对象代替newaxis。”
endlith 2012年

5
另外,如果您与不熟悉numpy索引详细信息的人员一起工作,当他们看到数组被“无”取消引用时,他们似乎会发疯
彼得

1
None优化执行速度是一个更好的地方,它可以带来很小的时间收益。但是通常您应该更喜欢np.newaxis
godaygo'5

2
他们为什么不使用newaxis = object()(或C级等效标准),这超出了我的范围...使用None非常容易出错。我有一个带有错误的函数(return应该返回一个布尔数组的裸露错误),并且由于形状不匹配而开始出现错误。让我花了一会儿时间才意识到用进行索引None并不会简单地引发一个IndexError。如果他们使用了“新鲜的”前哨值,我会避免尝试
花费
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.