【问题标题】:the difference between a[:,None] and a[:,] [duplicate]a[:,None] 和 a[:,] 的区别 [重复]
【发布时间】:2019-08-27 08:26:22
【问题描述】:

我想了解更多 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 的问题。
  • 感谢您的推荐!我已经检查过了。你是对的,但它确实是 numpy 问题,因为 python 3.x 不支持元组作为列表索引。
  • Python 解释器会引发语法错误。 [1,2,3][:,] 引发 TypeError,x[,:]x[,3] 引发语法错误,无论 x 是什么。我认为相关的语法规范是target_list in docs.python.org/3/reference/…。即使在索引之外 (,2)[,34] 也是错误的。
  • 啊!你一针见血!是的!

标签: arrays python-3.x numpy


【解决方案1】:

我猜你应该使用np.newaxis而不是None,这实际上是相同的,但是使用np.newaxis,代码更具可读性,因为它在这个维度插入了一个新轴。

见: https://docs.scipy.org/doc/numpy-1.13.0/reference/arrays.indexing.html#numpy.newaxis

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    • 2021-05-04
    • 1970-01-01
    • 2019-12-18
    • 2013-07-09
    • 1970-01-01
    相关资源
    最近更新 更多