- NumPy 教程
- NumPy - 首页
- NumPy - 简介
- NumPy - 环境
- NumPy 数组
- NumPy - Ndarray 对象
- NumPy - 数据类型
- NumPy 创建和操作数组
- NumPy - 数组创建例程
- NumPy - 数组操作
- NumPy - 从现有数据创建数组
- NumPy - 从数值范围创建数组
- NumPy - 迭代数组
- NumPy - 重塑数组
- NumPy - 连接数组
- NumPy - 堆叠数组
- NumPy - 分割数组
- NumPy - 展平数组
- NumPy - 转置数组
- NumPy 索引和切片
- NumPy - 索引和切片
- NumPy - 高级索引
- NumPy 数组属性和操作
- NumPy - 数组属性
- NumPy - 数组形状
- NumPy - 数组大小
- NumPy - 数组步幅
- NumPy - 数组元素大小
- NumPy - 广播
- NumPy - 算术运算
- NumPy - 数组加法
- NumPy - 数组减法
- NumPy - 数组乘法
- NumPy - 数组除法
- NumPy 高级数组操作
- NumPy - 交换数组轴
- NumPy - 字节交换
- NumPy - 副本和视图
- NumPy - 元素级数组比较
- NumPy - 过滤数组
- NumPy - 连接数组
- NumPy - 排序、搜索和计数函数
- NumPy - 搜索数组
- NumPy - 数组的并集
- NumPy - 查找唯一行
- NumPy - 创建日期时间数组
- NumPy - 二元运算符
- NumPy - 字符串函数
- NumPy - 数学函数
- NumPy - 统计函数
- NumPy - 矩阵库
- NumPy - 线性代数
- NumPy - Matplotlib
- NumPy - 使用 Matplotlib 绘制直方图
- NumPy - NumPy 的 I/O
- NumPy 排序和高级操作
- NumPy - 排序数组
- NumPy - 沿轴排序
- NumPy - 使用花式索引排序
- NumPy - 结构化数组
- NumPy - 创建结构化数组
- NumPy - 操作结构化数组
- NumPy - 字段访问
- NumPy - 记录数组
- Numpy - 加载数组
- Numpy - 保存数组
- NumPy - 将值追加到数组
- NumPy - 交换数组的列
- NumPy - 向数组插入轴
- NumPy 处理缺失数据
- NumPy - 处理缺失数据
- NumPy - 识别缺失值
- NumPy - 删除缺失数据
- NumPy - 估算缺失数据
- NumPy 性能优化
- NumPy - 使用数组进行性能优化
- NumPy - 使用数组进行矢量化
- NumPy - 数组的内存布局
- Numpy 线性代数
- NumPy - 线性代数
- NumPy - 矩阵库
- NumPy - 矩阵加法
- NumPy - 矩阵减法
- NumPy - 矩阵乘法
- NumPy - 元素级矩阵运算
- NumPy - 点积
- NumPy - 矩阵求逆
- NumPy - 行列式计算
- NumPy - 特征值
- NumPy - 特征向量
- NumPy - 奇异值分解
- NumPy - 求解线性方程
- NumPy - 矩阵范数
- NumPy 元素级矩阵运算
- NumPy - 求和
- NumPy - 平均值
- NumPy - 中位数
- NumPy - 最小值
- NumPy - 最大值
- NumPy 集合运算
- NumPy - 唯一元素
- NumPy - 交集
- NumPy - 并集
- NumPy - 差集
- NumPy 有用资源
- NumPy 编译器
- NumPy - 快速指南
- NumPy - 有用资源
- NumPy - 讨论
NumPy - 广播
NumPy 广播
NumPy 中的广播是指通过自动扩展较小数组的形状以匹配较大数组的形状来对不同形状的数组执行运算的能力。这在执行算术运算或将函数应用于不同维度的数组时非常有用。
在执行算术运算时,NumPy 对数组的对应元素进行运算。如果数组具有相同的形状,则可以顺利地执行运算。但是,如果数组具有不同的形状,则 NumPy 使用广播来对齐它们,从而可以轻松地进行元素级运算。
广播规则
为了使广播起作用,必须满足以下规则:
- 如果数组具有不同的维度数,则较小维度数组的形状将在左侧填充 1,直到两个形状具有相同的长度。
- 每个维度的尺寸必须相同,或者其中一个必须为 1。
- 广播从最后一个维度应用到第一个维度。
例如,考虑两个形状为(3, 4)和(4,)的数组。广播规则将如下对齐形状:
填充较小数组的形状:较小数组的形状 (4,) 被填充为 (1, 4)。
对齐维度:形状 (3, 4) 和 (1, 4) 分别对齐为 (3, 4) 和 (3, 4)。
执行元素级运算:运算应用于对齐的形状。
向数组添加标量
当向数组添加标量时,NumPy 使用广播将标量应用于数组的每个元素。广播扩展标量以匹配数组的形状,从而实现元素级运算。
示例
在以下示例中,我们将标量“10”广播到数组的每个元素,导致每个元素增加 10:
import numpy as np # Creating an array array = np.array([[1, 2, 3], [4, 5, 6]]) # Adding a scalar result = array + 10 print(result)
以下是获得的输出:
[[11 12 13][14 15 16]]
添加不同形状的数组
当添加不同形状的数组时,NumPy 应用广播规则使它们的形状兼容。广播通过将较小数组扩展到较大数组上起作用,以便两个数组具有相同的形状以进行元素级加法。
此过程无需在执行运算之前手动重新整形数组。
示例 1
在此示例中,我们将第二个数组“array2”广播以匹配第一个数组“array1”的形状:
import numpy as np # Creating two arrays with different shapes array1 = np.array([[1, 2, 3], [4, 5, 6]]) array2 = np.array([10, 20, 30]) # Adding arrays with broadcasting result = array1 + array2 print(result)
这将产生以下结果:
[[11 22 33] [14 25 36]]
示例 2
以下是另一个在 NumPy 中广播两个不同形状数组的示例:
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兼容。
使用多维数组进行广播
在对具有不同形状的多维数组执行运算时,广播规则会对齐它们的维度,以便可以对它们进行元素级运算。
此过程涉及扩展较小数组以匹配较大数组的形状,从而可以顺利地执行运算。
示例
在以下示例中,我们创建了两个 3D 数组,然后使用广播将它们相加:
import numpy as np # Creating two 3D arrays array1 = np.ones((2, 3, 4)) array2 = np.arange(4) # Adding arrays with broadcasting result = array1 + array2 print(result)
以下是上述代码的输出:
[[[1. 2. 3. 4.] [1. 2. 3. 4.] [1. 2. 3. 4.]] [[1. 2. 3. 4.] [1. 2. 3. 4.] [1. 2. 3. 4.]]]
使用广播应用函数
广播不仅简化了不同形状数组之间的算术运算,还允许跨数组应用函数。这些函数可以包括:
数学函数:执行数学运算的函数,例如加法、减法、乘法和除法。
统计函数:计算统计属性的函数,如平均值、中位数、方差和标准差。
归约函数:通过执行求和、乘积或最大值等运算来减少数组维度的函数。
逻辑运算:执行逻辑运算的函数,例如比较和逻辑运算(例如,AND、OR、NOT)。
在将函数应用于不同形状的数组时,广播确保函数按元素进行应用。
示例
在此示例中,我们使用 numpy.maximum() 函数对两个数组执行元素级比较。该函数将“array1”的每个元素与“array2”的对应元素进行比较,结果是一个数组,其中每个元素是输入数组中对应元素的最大值:
import numpy as np # Creating arrays array1 = np.array([[1, 2, 3], [4, 5, 6]]) array2 = np.array([[10], [20]]) # Applying a function with broadcasting result = np.maximum(array1, array2) print(result)
执行上述代码后,我们将获得以下输出:
[[10 10 10] [20 20 20]]