• [Numpy] 广播机制(Broadcast)


    美图欣赏2022/07/27

    广播,就是Numpy不同维度数组之间可以进行数值计算的方式

    广播是Numpy数组独有的功能,列表、元组等其他普通数据类型不具备此功能

    如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a * b 的结果就是数组 a 与数组 b 对应位相乘,它们直接可以做相应的运算,这要求数组的维数相同,且各维度的长度相同

    1. import numpy as np
    2. a = np.array([1,2,3,4])
    3. b = np.array([10,20,30,40])
    4. res = a * b
    5. print(res) # [ 10 40 90 160]

    当运算中的2个数组的形状不同时,Numpy将自动触发广播机制(对形状较小的数组,在横向或纵向上进行一定次数的重复,使其与形状较大的数组拥有相同的维度)

    1. import numpy as np
    2. a = np.array([[ 0, 0, 0],
    3. [10,10,10],
    4. [20,20,20],
    5. [30,30,30]])
    6. b = np.array([0,1,2])
    7. '''
    8. [[ 0 1 2]
    9. [10 11 12]
    10. [20 21 22]
    11. [30 31 32]]
    12. '''
    13. print(a + b)

    4 x 3的二维数组a与1 x 3的一维数组b相加,本质上可以理解为数组b在纵向上向下拓展3次(将第一行重复 3 次),从而生成与数组a相同形状的数组,之后再与数组a进行运算 

    Numpy数组广播机制

    1.一维数组和标量直接运算,然后一维数组的每一个元素都与该标量做差,最后得到的结果还是一个一维数组

    1. import numpy as np
    2. boradcast = np.array([1,2,3,4,5])
    3. scalar = 1
    4. boradcast - scalar # array([0, 1, 2, 3, 4])

    2.当一个二维数组与一个一维数组进行运算时,一维数组以其自身规模大小为单位在二维数组上进行传播 

    1. import numpy as np
    2. boradcast2 = np.array([[1,2,3,4,5],
    3. [6,7,8,9,10]])
    4. boradcast1 = np.array([1,2,3,4,5])
    5. '''
    6. array([[0, 0, 0, 0, 0],
    7. [5, 5, 5, 5, 5]])
    8. '''
    9. boradcast2 - boradcast1

    3.当一个三维数组与一个标量进行运算时,标量以其自身规模大小为单位在三维数组上传播,于是最后的结果就是三维数组的每个元素都减1 

    1. import numpy as np
    2. boradcast3 = np.array([[[1,2,3,4,5],[6,7,8,9,10]],
    3. [[11,12,13,14,15],[16,17,18,19,20]]])
    4. scalar = 1
    5. '''
    6. array([[[ 0, 1, 2, 3, 4],
    7. [ 5, 6, 7, 8, 9]],
    8. [[10, 11, 12, 13, 14],
    9. [15, 16, 17, 18, 19]]])
    10. '''
    11. boradcast3 - scalar

    4.当一个三维数组与一个二维数组进行运算时,二维数组以其自身规模大小为单位在三维数组上传播,于是最后的结果就是该三维数组下的两个二维数组与进行广播的这个二维数组做差

    1. import numpy as np
    2. boradcast2 = np.array([[1,2,3,4,5],
    3. [6,7,8,9,10]])
    4. boradcast3 = np.array([[[1,2,3,4,5],[6,7,8,9,10]],
    5. [[11,12,13,14,15],[16,17,18,19,20]]])
    6. '''
    7. array([[[ 0, 0, 0, 0, 0],
    8. [ 0, 0, 0, 0, 0]],
    9. [[10, 10, 10, 10, 10],
    10. [10, 10, 10, 10, 10]]])
    11. '''
    12. boradcast3 - boradcast2
  • 相关阅读:
    ESP8266-Arduino编程实例-LittleFS及数据上传
    Html-定位(Position)
    Mybatis的三种映射关系以及联表查询
    金属制品行业B2B交易管理系统:充分整合行业资源,助力企业开拓市场营销渠道
    京东搜索--es和springboot加前端vue
    Lactoferrin-PEG-alginate 乳铁蛋白-聚乙二醇-海藻酸钠
    ios上传图片旋转90度的解决办法 - nextcloud
    matlab展示两个向量之间的差异
    [车联网安全自学篇] 七. ATTACK安全之Android SSH原理分析以及攻击检测
    半自动ORM—mybatis
  • 原文地址:https://blog.csdn.net/Hudas/article/details/126007671