NumPy Broadcast广播
NumPy Broadcast广播是指NumPy在算术运算期间处理不同形状的数组的能力。数组上的算术运算通常在相应的元素上完成。如果两个数组的形状完全相同,那么这些操作就可以顺利执行。numpy在算术运算期间如何处理具有不同维度的数组,这会导致某些约束,较小的数组在较大的数组中广播,以便它们具有兼容的形状。
广播提供了一种向量化数组操作的方法,以便循环发生在C中而不是Python中,因为我们知道Numpy是在C中实现的。它这样做不会产生不必要的数据副本,从而导致高效的算法实现。在某些情况下,广播会导致内存使用效率低下,从而减慢计算速度。
推荐:NumPy数据类型
数组维度相同
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中仍然可以对形状不相似的数组进行操作。较小的数组被广播到较大数组的大小,以便它们具有兼容的形状。
如果满足以下规则,则可以广播-
- ndim小于另一个的数组在其形状中以“1”开头。
- 输出形状的每个维度中的大小是该维度中输入大小的最大值。
- 如果输入在特定维度中的大小与输出大小匹配或其值恰好为1,则可以在计算中使用输入。
- 如果输入的维度大小为1,则该维度中的第一个数据条目将用于沿该维度的所有计算。
推荐:NumPy数组属性
如果上述规则产生有效结果并且以下其中一项为真,则称一组数组是可广播的-
- 数组具有完全相同的形状。
- 数组具有相同的维数,并且每个维的长度是公共长度或1。
- 维度太少的数组可以在其形状前面加上长度为1的维度,因此上述属性是正确的。
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('First array:')
print(a)
print('\n')
print('Second array:')
print(b)
print('\n')
print('First Array + Second Array')
print(a + b)
该程序的输出如下-
First array:
[[ 0. 0. 0.]
[10. 10. 10.]
[20. 20. 20.]
[30. 30. 30.]]
Second array:
[1. 2. 3.]
First Array + Second Array
[[ 1. 2. 3.]
[11. 12. 13.]
[21. 22. 23.]
[31. 32. 33.]]
下图演示了广播数组b以与a兼容。
总结
以上是晓得博客为你介绍的NumPy Broadcast 广播的全部内容,希望对你的Python编程学习有所帮助,如有问题,欢迎留言探讨。
推荐:NumPy教程