Myluzh Blog

Strive to become a dream architect.

Python numpy 数组间运算与广播机制

发布时间: 2023-7-20 文章作者: myluzh 分类名称: Python


0x01 数组与数运算
import numpy as np

arr = np.array([[1, 2, 3, 2, 1, 4], [5, 6, 1, 2, 3, 1]])
"""
arr + 1
array([[2, 3, 4, 3, 2, 5],
       [6, 7, 2, 3, 4, 2]])

arr / 2
array([[0.5, 1. , 1.5, 1. , 0.5, 2. ],
       [2.5, 3. , 0.5, 1. , 1.5, 0.5]])
"""
# 可以对比python列表的运算,看出区别
a = [1, 2, 3, 4, 5]
"""
a*3
Out[3]: [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
"""

0x02 数组与数组运算
数组在进行矢量化运算时,要求数组的形状是相等的。当形状不相等的数组执行算术运算的时候,就会出现广播机制,该机制会对数组进行扩展,使数组的shape属性值一样,这样,就可以进行矢量化运算了。下面通过一个例子进行说明:
import numpy as np

arr1 = np.array([[0], [1], [2], [3]])
"""
arr1.shape
Out[3]: (4, 1)
"""

arr2 = np.array([1, 2, 3])
"""
arr2.shape
Out[4]: (3,)
"""

arr1 + arr2
"""
结果为:
array([[1, 2, 3],
       [2, 3, 4],
       [3, 4, 5],
       [4, 5, 6]])
"""
上述代码中,数组arr1是4行1列,ar2是1行3列。这两个数组要进行相加,按照广播机制会对数组arr1和arr2都进行扩展,使得数组arr1和arr2都变成4行3列。
下面通过一张图来描述广播机制扩展数组的过程
点击查看原图
广播机制实现了时两个或两个以上数组的运算,即使这些数组的shape不是完全相同的,只需要满足如下任意一个条件即可。
1.数组的某一维度等长。
2.其中一个数组的某一维度为1。
广播机制需要扩展维度小的数组,使得它与维度最大的数组的shape值相同,以便使用元素级函数或者运算符进行运算。



标签: python numpy

发表评论