NumPy 教程:广播(在算术运算期间处理各种形状的数组的能力)
广播 是指 NumPy 在算术运算期间处理各种形状的数组的能力。数组的算术运算通常是针对相应的元素进行的。如果两个字段的形状完全相同,则这些操作将顺利执行。
示例 1
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]
如果两个数组的维度不相同,则元素之间无法进行操作。然而,由于 NumPy 的广播特性,仍然可以在 NumPy 中使用不同形状的数组。较小的数组 广播 较大数组的大小,以使它们的形状兼容。
如果满足以下规则,则允许广播:
ndim
较小的数组在前面附加长度维度 1。- 输出字段每个维度的大小是输入字段该维度大小的最大值。
- 如果每个维度的输入大小与输出大小匹配或其值恰好为 1,则将其包含在计算中。
- 如果输入维度的大小为 1,则该维度中的第一个数据元素将用于该维度中的所有计算。
如果上述规则给出有效结果,并且满足以下条件之一,则该数组被视为广播。
- 田野的形状相同。
- 数组具有相同的维度数,并且每个维度具有相同的长度,即长度为 1。
- 数组的维度非常少,并且可以在前面加上长度为 1 的维度以使上述条件成立。
下面的示例显示了一个广播示例。
示例2
import numpy as np
a = np.array([[0.0,0.0,0.0],[10.0,10.0,10.0],[20.0,20.0,20.0],[30.0,30.0,30.0]])
b = np.array([1.0,2.0,3.0])
print '第一个数组:'
print a
print '\n'
print '第二个数组:'
print b
print '\n'
print '第一个数组加第二个数组:'
print a + b
输出结果如下:
第一个数组:
[[ 0. 0. 0.]
[ 10. 10. 10.]
[ 20. 20. 20.]
[ 30. 30. 30.]]
第二个数组:
[ 1. 2. 3.]
第一个数组加第二个数组:
[[ 1. 2. 3.]
[ 11. 12. 13.]
[ 21. 22. 23.]
[ 31. 32. 33.]]
下图展示了如何广播b
字段以兼容
第一个数组:
[[ 0. 0. 0.]
[ 10. 10. 10.]
[ 20. 20. 20.]
[ 30. 30. 30.]]
第二个数组:
[ 1. 2. 3.]
第一个数组加第二个数组:
[[ 1. 2. 3.]
[ 11. 12. 13.]
[ 21. 22. 23.]
[ 31. 32. 33.]]
字段。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。