如何将切片数组连接到 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])
+
用于连接列表。对于数组是加法(数字总和)。
您的问题不应该草率地使用 list
和 array
。它们是不同的东西(在 python/numpy 中)并且会产生令人困惑的答案。
其他答案已经解释了您的代码失败的原因。你可以这样做:
out = np.zeros_like(y)
out[:-2] = y[2:]
输出:
array([2, 4, 6, 1, 0, 0])
我正在尝试将切片数组合并到 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])
+
用于连接列表。对于数组是加法(数字总和)。
您的问题不应该草率地使用 list
和 array
。它们是不同的东西(在 python/numpy 中)并且会产生令人困惑的答案。
其他答案已经解释了您的代码失败的原因。你可以这样做:
out = np.zeros_like(y)
out[:-2] = y[2:]
输出:
array([2, 4, 6, 1, 0, 0])