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

如何在Python中将切片数组连接到列表,python,numpy,numpy-ndarray,array-broadcasting,numpy-slicing,Python,Numpy,Numpy Ndarray,Array Broadcasting,Numpy Slicing,我试图在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数组的工作原理类似于矩阵。因此,当您尝试将加法

我试图在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数组时,实际上是在执行“元素级加法”。这就是为什么使用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)
函数


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

row=y[2:6]+列表(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。连接

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])
+
用于串联列表。对于数组,是加法(数字和)


你的问题不应该草率地使用
列表
数组
。它们是不同的东西(在python/numpy中),可能会产生令人困惑的答案。

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

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

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

y[2:6]+list(np.array([0,0])
+
对于一个列表来说是串联的,但是对于一个数组来说是加法的(并且有优先级)。你想要的输出是什么?(请使用预期输出更新问题)。您也可以使用。
array([2, 4, 6, 1, 0, 0])