如何将切片数组连接到 Python 中的列表

How to concatenate sliced array to a list in Python

我正在尝试将切片数组合并到 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。

Numpy 数组的工作原理类似于矩阵。因此,当您尝试将加法运算应用于 numpy 数组时,您实际上是在执行“element-wise 加法”。这就是为什么您使用 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])

对于串联,您需要先将您的 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])

要连接数组,请使用 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 中)并且会产生令人困惑的答案。

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

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

输出:

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