【问题标题】:How to concatenate sliced array to a list in Python如何将切片数组连接到 Python 中的列表
【发布时间】:2020-09-11 19:57:32
【问题描述】:

我正在尝试将切片数组合并到 Python 中的列表,但我得到了一个

 error: ValueError: operands could not be broadcast together with shapes `(4,)` `(2,)` . 

这是我的代码:

y = np.array([5,3,2,4,6,1])
row = y[2:6] + np.array([0,0])

我希望得到一个 2 项向左移动的向量,最后 2 项分配给 0。

【问题讨论】:

  • y[2:6] + list(np.array([0,0]))?
  • + 对于列表是连接的,但对于数组是添加的(并且具有优先级)。
  • 您要查找的输出是什么? (请用预期的输出更新问题)。
  • 你也可以使用numpy concatenate

标签: python numpy numpy-ndarray array-broadcasting numpy-slicing


【解决方案1】:

Numpy 数组的工作原理类似于矩阵。因此,当您尝试将加法运算应用于 numpy 数组时,实际上是在执行“逐元素加法”。这就是为什么使用 numpy 数组添加的值必须与 numpy 数组具有相同维度的原因。否则这样的值是可以广播的。

注意这个例子来理解我在说什么。

添加两个带有加号的列表:

>>> [1,2] + [3,4]
[1, 2, 3, 4]

添加两个 numpy 数组:

>>> np.array([1,2]) + np.array([3,4])
array([4, 6])

要完成工作,请使用np.append(arr, val, axis) 函数。 Documentation

array([1, 2, 3, 4])
>>> np.append([1,2], np.array([3,4]))
array([1, 2, 3, 4])

【讨论】:

    【解决方案2】:

    要连接数组,请使用np.concatenate:

    In [93]: y = np.array([5,3,2,4,6,1])
    In [94]: y[2:6]
    Out[94]: array([2, 4, 6, 1])
    In [95]: np.concatenate((y[2:6], np.array([0,0])))
    Out[95]: array([2, 4, 6, 1, 0, 0])
    

    + 是列表的连接。对于数组是加法(数字和)。

    您的问题不应该草率​​地使用listarray。它们是不同的东西(在 python/numpy 中)并且会产生令人困惑的答案。

    【讨论】:

      【解决方案3】:

      其他答案已经解释了您的代码失败的原因。你可以这样做:

      out = np.zeros_like(y)
      out[:-2] = y[2:]
      

      输出:

      array([2, 4, 6, 1, 0, 0])
      

      【讨论】:

        【解决方案4】:

        对于串联,您需要先将 numpy 数组转换为列表。

        row = y[2:6] + list(np.array([0,0]))

        或等效

        row = y[2:6] + np.array([0,0]).tolist()

        但是,如果您希望将两者相加(叠加一个列表和 numpy 数组),那么 numpy 数组只需要与 y[2:6] 的形状相同:

        In : y[2:6] + np.array([1, 2, 3, 4])
        Out: array([y[2] + 1, y[3] + 2, y[4] + 3, y[5] + 4])
        

        【讨论】:

          猜你喜欢
          • 2016-02-23
          • 2015-10-23
          • 2023-03-07
          • 2019-08-08
          • 1970-01-01
          • 2016-03-27
          • 2017-10-04
          • 2020-11-29
          • 1970-01-01
          相关资源
          最近更新 更多