经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » NumPy » 查看文章
Python NumPy 广播(Broadcast)
来源:cnblogs  作者:VipSoft  时间:2023/5/12 9:03:16  对本文有异议

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

  1. import numpy as np
  2. """
  3. 如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a*b 的结果就是 a 与 b 数组对应位相乘。这要求维数相同,且各维度的长度相同。
  4. """
  5. a = np.array([1, 2, 3, 4])
  6. b = np.array([10, 20, 30, 40])
  7. c = a * b
  8. print(c) # [ 10 40 90 160]
  9. """
  10. 当运算中的 2 个数组的形状不同时,numpy 将自动触发广播机制。如:
  11. """
  12. a = np.array([[0, 0, 0],
  13. [10, 10, 10],
  14. [20, 20, 20],
  15. [30, 30, 30]])
  16. b = np.array([0, 1, 2])
  17. print(a + b)
  18. print('\n')
  19. """
  20. 4x3 的二维数组与长为 3 的一维数组相加,等效于把数组 b 在二维上重复 4 次再运算:
  21. """
  22. a = np.array([[0, 0, 0],
  23. [10, 10, 10],
  24. [20, 20, 20],
  25. [30, 30, 30]])
  26. b = np.array([0, 1, 2])
  27. bb = np.tile(b, (4, 1)) # 重复 b 的各个维度, 假设reps的维度为d,那么新数组的维度为max(d,A.ndim)
  28. print(bb)
  29. print(a + bb)

image

如果两个 Tensor 的形状的长度不一致,会在较小长度的形状矩阵前部添加 1,直到两个 Tensor 的形状长度相等。
保证两个 Tensor 形状相等之后,每个维度上的结果维度就是当前维度上的较大值。

  1. import numpy as np
  2. """
  3. 如果两个 Tensor 的形状的长度不一致,会在较小长度的形状矩阵前部添加 1,直到两个 Tensor 的形状长度相等。
  4. 保证两个 Tensor 形状相等之后,每个维度上的结果维度就是当前维度上的较大值。
  5. """
  6. x = np.ones([2, 1, 4])
  7. y = np.ones((3, 1))
  8. print('x => ', x)
  9. print('y => ', y)
  10. print('x+y => ', x + y)

image

广播的规则:

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

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

  • 数组拥有相同形状。
  • 当前维度的值相等。
  • 当前维度的值有一个是 1

原文链接:https://www.cnblogs.com/vipsoft/p/17373444.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号