ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【numpy基础】--广播计算 [打印本页]

作者: 风雨同行    时间: 2023-6-28 13:45
标题: 【numpy基础】--广播计算
numpy的广播计算是指在多维数组上进行的一种高效计算方式。
它可以将计算任务分配到每个维度上,并且可以在计算过程中进行数据共享和同步,从而提高计算效率和精度。
广播计算在数值计算、科学计算、机器学习等领域都有广泛的应用。
例如,在数值计算中,广播计算可以用于求解大规模的非线性方程组;在科学计算中,广播计算可以用于模拟和预测自然现象;在机器学习中,广播计算可以用于分布式训练和推理等场景。
numpy中广播计算遵循3个严格的规则:
广播规则一

比如一维数组和数字运算:
  1. import numpy as np
  2. arr = np.random.randint(1, 10, 5)
  3. print(arr)
  4. #运行结果
  5. [9 8 2 9 7]
  6. print(arr + 1)
  7. #运行结果
  8. [10  9  3 10  8]
  9. print(arr * 2)
  10. #运行结果
  11. [18 16  4 18 14]
复制代码
arr+1 时,1被自动扩充成[1, 1, 1, 1, 1],和 arr 一样结构的数组。
arr*2 时,同样,2被自动扩充成[2, 2, 2, 2, 2],和 arr 一样结构的数组。
二维数组和一维数组运算时:
  1. arr1 = np.random.randint(1, 10, (3, 3))
  2. print(arr1)
  3. #运行结果
  4. [[4 4 3]
  5. [8 2 1]
  6. [5 6 5]]
  7. arr2 = np.random.randint(1, 10, 3)
  8. print(arr2)
  9. #运行结果
  10. [3 9 2]
  11. print(arr1 + arr2)
  12. #运行结果
  13. [[ 7 13  5]
  14. [11 11  3]
  15. [ 8 15  7]]
复制代码
这种情况下,arr2和arr1一样,都是3列,只是行数不一样,所以被自动扩展成:
[[3 9 2]
[3 9 2]
[3 9 2]]
然后再和arr1对应的位置进行加法运算。
广播规则二

规则二两个数组每个维度上的数量都不一样,比如如下两个二维数组的运算:
  1. arr1 = np.random.randint(1, 10, (1, 3))
  2. print(arr1)
  3. #运行结果
  4. [[6 6 7]]
  5. arr2 = np.random.randint(1, 10, (3, 1))
  6. print(arr2)
  7. #运行结果
  8. [[7]
  9. [6]
  10. [2]]
  11. print(arr1 + arr2)
  12. #运行结果
  13. [[13 13 14]
  14. [12 12 13]
  15. [ 8  8  9]]
复制代码
arr1是13的数组,所以arr1自动扩充了行,保持和arr2一致:
[[6 6 7]
[6 6 7]
[6 6 7]]
arr2是31的数组,所以arr2自动扩充了列,保持和arr1一致:
[[7  7  7]
[6  6  6]
[2  2  2]]
然后 arr1+arr2 得出了上面的结果。
广播规则三

规则三也是两个维度不一样的数组,只不过在不一样的那个维度上,它们的维度数都不是1。
比如:
  1. arr1 = np.random.randint(1, 10, (2, 3))
  2. print(arr1)
  3. #运行结果
  4. [[7 9 3]
  5. [1 8 7]]
  6. arr2 = np.random.randint(1, 10, (3, 1))
  7. print(arr2)
  8. #运行结果
  9. [[8]
  10. [6]
  11. [7]]
  12. print(arr1 + arr2)
  13. #运行结果
  14. #ValueError: operands could not be broadcast together with shapes (2,3) (3,1)
复制代码
arr1是23的数组,arr2是31的数组。
运算时,arr2是可以扩充成3的,但是arr1无法扩充成3,因为arr1行的维度和arr2虽然不一样不等于1。
总结回顾

numpy的广播计算虽然简单,但是对我们的数据分析却很有意义:

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4