python - 无法理解 numpy 数组添加

标签 python arrays python-3.x numpy

我确信这是一个非常基本的问题。然而,即使在浏览了几个教程页面和 the official documentation 之后,我无法理解 numpy 数组中的加法逻辑。考虑以下示例:

In [5]: a = np.array([1, 2, 3])

In [6]: b = np.array([1, 2, 3, 4])

In [7]: a + b
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-7-f96fb8f649b6> in <module>()
----> 1 a + b

ValueError: operands could not be broadcast together with shapes (3,) (4,) 

这很好。由于数组具有不同的形状,我们不期望“按元素”操作成立。现在考虑一下:

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

突然间,不同的形状似乎没有问题了。此外,这对我来说看起来不像是“按元素”操作。即使在以下情况下,这似乎也成立:

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

我无法理解这些输出和错误背后的逻辑。

最佳答案

您看到 numpy 正在工作。

只有一个元素的 numpy 数组将被视为标量。因此,您的第二个代码块与 1 + np.array([1, 2, 3, 4]) 相同。 1(或 np.array([1]))被广播到矢量的形状,因此它的工作方式类似于 np.array([1, 1,1,1]),因此您将每个其他值加一。

第三个 block 中的代码将列向量(第一个维度为 1 的二维数组)乘以行向量,生成结果的二维数组。每个输入数组都扩展到另一个数组的维度,因此 array([[1],[2]]) 拉伸(stretch)了每一行,因此它的工作方式类似于 array([ [1,1,1,1], [2,2,2,2]])array([1,2,3,4]) 行重复到成为 array([[1,2,3,4],[1,2,3,4]])。然后将两个 2×4 数组按元素相加。

关于python - 无法理解 numpy 数组添加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41658747/

相关文章:

java - 如何将数组写入具有列分隔值的文件

python - GAE : Convert model to subclass of polymodel

python - Celery 的异步替换

python - 分配模块函数返回

java - 从另一个类调用 string[] 显示为 null

python - mousePressEvent 按下了哪个 QLabel

python - Python 中的 Marching Square 算法

arrays - 如何在 ruby​​ 中分割单行输入并将其存储为不同的变量和不同的数据类型(即整数/字符串/数组)

python-3.x - 导入的包在 Jupyter-Python 中不可用

python - 正确使用生成器输入