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

nik*_*kow 82 python numpy

在numpy中,可以在切片语法中使用'newaxis'对象来创建长度为1的轴,例如:

import numpy as np
print np.zeros((3,5))[:,np.newaxis,:].shape
# shape will be (3,1,5)
Run Code Online (Sandbox Code Playgroud)

文件指出一个也可以用None代替newaxis,效果是完全一样的.

有没有理由选择一个而不是另一个?是否有任何一般偏好或风格指南?我的印象是newaxis更受欢迎,可能是因为它更明确.那么有什么理由None被允许吗?

AFo*_*lia 93

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

In [1]: import numpy

In [2]: numpy.newaxis is None
Out[2]: True
Run Code Online (Sandbox Code Playgroud)

作者可能选择了它,因为它们需要一个方便的常数,并且None可用.

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

  • 他们实际上说你可以使用None,所以他们现在不能改变它:"newaxis对象可以在上面讨论的基本切片语法中使用.也可以使用None而不是newaxis." (6认同)
  • 此外,如果你与不熟悉numpy索引细节的人一起工作,当他们看到阵列被"无"取消引用时,他们似乎会发疯 (5认同)
  • 为什么他们不使用 `newaxis = object()`(或 C 级等效项)超出了我的理解......使用 `None` 很容易出错。我有一个带有错误的函数(一个应该返回布尔数组的裸`return`)并且由于形状不匹配而开始出现错误。我花了一段时间才意识到使用 `None` 进行索引并不会简单地引发 `IndexError`。如果他们使用了“新鲜”的哨兵值,我就可以避免 30 分钟的尝试来理解错误...... (3认同)