a[:,None]和a[:,]之间的区别

3

我想了解更多有关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
谢谢您的推荐!我已经检查过了。您是正确的,但这是一个numpy问题,因为Python 3.x不支持元组作为列表索引。 - haofeng
Python解释器会引发语法错误。[1,2,3][:,]会引发TypeError,x[,:]x[,3]无论x是什么都会引发语法错误。我认为相关的语法规范在https://docs.python.org/3/reference/simple_stmts.html#assignment-statements中的`target_list`。即使在索引之外,`(,2)`和`[,34]`也是错误的。 - hpaulj
啊!你打中了要害!耶! - haofeng
1个回答

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接