zoukankan      html  css  js  c++  java
  • NumPy 广播(Broadcast)

    广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行。
    如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a*b 的结果就是 a 与 b 数组对应位相乘。这要求维数相同,且各维度的长度相同。

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

    输出结果为:

    [ 10  40  90 160]

    当运算中的 2 个数组的形状不同时,numpy 将自动触发广播机制。如:

    import numpy as np 
     
    a = np.array([[ 0, 0, 0],
               [10,10,10],
               [20,20,20],
               [30,30,30]])
    b = np.array([1,2,3])
    print(a + b)

    输出结果为:

    [[ 1  2  3]
     [11 12 13]
     [21 22 23]
     [31 32 33]]
    import numpy as np 
     
    a = np.array([[ 0, 0, 0],
               [10,10,10],
               [20,20,20],
               [30,30,30]])
    b = np.array([1,2,3])
    bb = np.tile(b, (4, 1))  # 重复 b 的各个维度tile() 函数,就是将原矩阵横向、纵向地复制。
    tile(mat, (1, 4))    # 列复制为原来的四倍
    print(a + bb)

    输出结果为:

    [[ 1  2  3]
     [11 12 13]
     [21 22 23]
     [31 32 33]]

    广播的规则:

    • 让所有输入数组都向其中形状最长的数组看齐,形状中不足的部分都通过在前面加 1 补齐。
    • 输出数组的形状是输入数组形状的各个维度上的最大值。
    • 如果输入数组的某个维度和输出数组的对应维度的长度相同或者其长度为 1 时,这个数组能够用来计算,否则出错。
    • 当输入数组的某个维度的长度为 1 时,沿着此维度运算时都用此维度上的第一组值。

    简单理解:对两个数组,分别比较他们的每一个维度(若其中一个数组没有当前维度则忽略),满足

    • 数组拥有相同形状。
    • 当前维度的值相等。
    • 当前维度的值有一个是 1。
    若条件不满足,抛出 "ValueError: frames are not aligned" 异常。
    别废话,拿你代码给我看。
  • 相关阅读:
    LeetCode 242. Valid Anagram (验证变位词)
    LeetCode 205. Isomorphic Strings (同构字符串)
    LeetCode 204. Count Primes (质数的个数)
    LeetCode 202. Happy Number (快乐数字)
    LeetCode 170. Two Sum III
    LeetCode 136. Single Number (落单的数)
    LeetCode 697. Degree of an Array (数组的度)
    LeetCode 695. Max Area of Island (岛的最大区域)
    Spark中的键值对操作
    各种排序算法总结
  • 原文地址:https://www.cnblogs.com/lvxueyang/p/13707510.html
Copyright © 2011-2022 走看看