我想了解更多有关numpy处理数组的内容。我发现a[:,None]和a[:,]之间有所不同,想要深入了解何时该使用它们。
我试图解决从2d数组中以特殊方式减去1d数组的问题,就像numpy-subtract-add-1d-array-from-2d-array中所述,我意识到a[:,None]和a[:,]之间存在差异。
>>> import numpy as np
>>> a = np.array([[1,2,3],[4,5,6],[7,8,9]])
>>> a
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> b = np.array([1,2,3])
>>> b
array([1, 2, 3])
>>> b[:,None]
array([[1],
[2],
[3]])
>>> b[:,]
array([1, 2, 3])
>>> b[None,:]
array([[1, 2, 3]])
>>> a-b[None,:]
array([[0, 0, 0],
[3, 3, 3],
[6, 6, 6]])
>>> b[,:] #false operation!!!
SyntaxError: invalid syntax
>>> a-b
array([[0, 0, 0],
[3, 3, 3],
[6, 6, 6]])
>>> a-b[:,np.newaxis]
array([[0, 1, 2],
[2, 3, 4],
[4, 5, 6]])
有人能给我提供官方或具体的参考资料吗?非常感谢!
a[:]
除了返回一个视图a
,没有改变其维度(请检查)。在a[:,]
中的逗号只是将索引参数变成元组(这是 Python 的基本操作),从功能上讲与普通视图相同。而a[,:]
是语法错误。这是由解释器引发的,而不是numpy
问题。 - hpaulj[1,2,3][:,]
会引发TypeError,x[,:]
或x[,3]
无论x
是什么都会引发语法错误。我认为相关的语法规范在https://docs.python.org/3/reference/simple_stmts.html#assignment-statements中的`target_list`。即使在索引之外,`(,2)`和`[,34]`也是错误的。 - hpaulj