Python 如何正确添加两个numpy数组?

Python 如何正确添加两个numpy数组?,python,Python,我不知道np.array([10,10])和np.array([[10,10]])之间的区别是什么。在学校里,我学到了只有具有相同维度的矩阵才能被添加。当我在np.array([10,10])上使用shape方法时,它给出了(2,)…这是什么意思?如何添加np_mat和np.array([10,10])?在我看来,尺寸不一样。我不明白什么?不能添加两个不同大小的数组。 但这两个都有第一维度,长度,等于2。(即len(a)==len(b)) Shape(2,)表示数组是一维的,第一个维度的大小是2

我不知道np.array([10,10])和np.array([[10,10]])之间的区别是什么。在学校里,我学到了只有具有相同维度的矩阵才能被添加。当我在np.array([10,10])上使用shape方法时,它给出了(2,)…这是什么意思?如何添加np_mat和np.array([10,10])?在我看来,尺寸不一样。我不明白什么?

不能添加两个不同大小的数组。 但这两个都有第一维度,长度,等于2。(即
len(a)==len(b)

Shape
(2,)
表示数组是一维的,第一个维度的大小是2

np.数组([[1,2],[3,4],[5,6]])
具有形状
(3,2)
,表示二维(3x2)

但是您可以添加它们,因为它们具有不同的维度,并且numpy强制将一个数字添加到包含相同数字的任意数组中。这叫做numpy

也就是说,您的代码得到的结果与:

np_mat=np.数组([[1,2],[3,4],[5,6]]
np_材料+10
或:

np_mat=np.数组([[1,2],[3,4],[5,6]]
np_mat+np.数组([[10,10],[10,10],[10,10])

看起来numpy在这里违反了数学规则。实际上,它将第二个矩阵
[10,10]
与第一个
[1,2],[3,4],[5,6]
的每个元素相加

这叫做https://docs.scipy.org/doc/numpy/user/basics.broadcasting.html.
[10,10]
的形状是
(2,)
(也就是说,数学上是
2
),而
[[1,2],[3,4],[5,6]
的形状是
(3,2)
(也就是说,数学上是
3 x 2
)。因此,根据一般广播规则,您应该得到shape
(3,2)
(即,从数学上讲,
3x2
)的结果

我不知道np.array([10,10])和np.array([[10,10]])之间的区别是什么


第一个是数组。第二个是数组的数组(在内存中,它实际上是一个数组,但在这里不相关)。您可以将第一个视为列向量(大小为2 x 1的矩阵),第二个视为行向量(大小为1 x 2的矩阵)。但是,请注意,在开始将向量解释为矩阵之前,行向量和列向量之间的区别在数学上是不相关的。

请继续阅读,它在numpy中用于对不同形状的数组进行算术运算np.array([10,10])是一维数组,np.array([10,10]])是一个多维数组,如@FlyingTeller告诉read up广播非常感谢@aimery的评论。我想我必须再次修改这个理论。我假设数组和矩阵是同义词。但显然不是。我熟悉矩阵和矩阵乘法的规则,我以前从未听说过在矩阵的上下文中广播。看起来,numpy数组的算法工作原理略有不同。非常感谢你的贡献!非常感谢@Arusekk的评论。1) 数组的长度是多少?对于字符串或列表等序列,我总是使用“长度”一词。但是我很难想象数组的长度是多少。2) 那么形状(2,)与尺寸(2x1)相同吗?形状(2,1)不存在?对不起,我不想深入研究这个理论。也许我得重新修改一下基础,然后再回到你的评论上来。无论如何,非常感谢!有关理论解释,请参见。
np_mat = np.array([[1, 2], [3, 4], [5, 6]])
np_mat + np.array([10, 10])