NumPy - 逐元素矩阵运算
NumPy 中的逐元素矩阵运算
NumPy 中的逐元素矩阵运算是指对两个矩阵或数组的对应元素执行运算。
这些运算是逐个元素执行的,这意味着第一个矩阵的每个元素都与第二个矩阵中的对应元素进行运算,或者通过标量值进行运算。这些运算包括加、减、乘、除等等。
逐元素运算广泛应用于数据处理、机器学习和数学计算,这类运算通常用于对大型数据集进行分析或转换。
逐元素运算的特点
以下是关于逐元素矩阵运算的一些要点 -
- 相同形状要求:对于两个矩阵之间的逐元素运算,两个矩阵应该具有相同的形状(维度)。如果它们的形状不同,NumPy 将抛出错误,除非使用广播(稍后讨论)。
- 标量运算:逐元素运算也可以在矩阵和标量值之间执行。在这种情况下,标量将分别应用于矩阵的每个元素。
- 效率:NumPy 中的逐元素运算经过高度优化,通常比使用传统 Python 循环执行相同运算要快得多。
常见的逐元素运算
在 NumPy 中,以下是常见的逐元素矩阵运算 -
- 逐元素加法: 将两个矩阵的对应元素相加。
- 逐元素减法: 将两个矩阵的对应元素相减。
- 逐元素乘法: 将两个矩阵的对应元素相乘。
- 逐元素除法: 将两个矩阵的对应元素相除。
- 标量运算:在矩阵和标量值之间应用算术运算。
逐元素矩阵加法
在此运算中,我们逐个元素地将两个矩阵相加。第一个矩阵中的每个元素都与第二个矩阵中的对应元素相加。
示例
在此示例中,结果矩阵的每个元素都是两个输入矩阵对应元素之和 -
import numpy as np # 定义两个矩阵 matrix_1 = np.array([[1, 2], [3, 4]]) matrix_2 = np.array([[5, 6], [7, 8]]) # 逐元素加法 result = matrix_1 + matrix_2 print(result)
以下是得到的输出 -
[[ 6 8] [10 12]]
逐元素矩阵减法
逐元素减法是指将两个矩阵的对应元素相减。第一个矩阵的每个元素都从第二个矩阵的对应元素中减去。
示例
在以下示例中,结果矩阵的每个元素都是两个矩阵对应元素之间的差值 −
import numpy as np # 定义两个矩阵 matrix_1 = np.array([[1, 2], [3, 4]]) matrix_2 = np.array([[5, 6], [7, 8]]) # 逐元素减法 result = matrix_1 - matrix_2 print(result)
以下是得到的输出 −
[[-4 -4] [-4 -4]]
逐元素矩阵乘法
逐元素矩阵乘法,通常称为 Hadamard 积,涉及将两个矩阵的对应元素相乘。此运算与传统的矩阵乘法不同。
示例
此处,结果矩阵的每个元素都是两个矩阵中对应元素的乘积 -
import numpy as np # 定义两个矩阵 matrix_1 = np.array([[1, 2], [3, 4]]) matrix_2 = np.array([[5, 6], [7, 8]]) # 逐元素乘法 result = matrix_1 * matrix_2 print(result)
以下是得到的输出 -
[[ 5 12] [21 32]]
逐元素矩阵除法
逐元素矩阵除法将两个矩阵的相应元素相除。将第一个矩阵的每个元素除以第二个矩阵的相应元素。
示例
本例中,结果是通过将两个矩阵的相应元素相除得出的 -
import numpy as np # 定义两个矩阵 matrix_1 = np.array([[1, 2], [3, 4]]) matrix_2 = np.array([[5, 6], [7, 8]]) # 逐元素除法 result = matrix_1 / matrix_2 print(result)
以下是得到的输出 -
[[0.2 0.33333333] [0.42857143 0.5 ]]
基于标量的逐元素运算
逐元素运算的另一个有用特性是在矩阵和标量值之间执行运算。
NumPy 允许对矩阵的每个元素进行标量值的加、减、乘、除运算。
示例
在加法运算中,标量值 2 被添加到矩阵的每个元素上。类似地,在乘法运算中,标量值 2 与矩阵的每个元素相乘,如下例所示 -
import numpy as np # 定义一个矩阵和一个标量 matrix_1 = np.array([[1, 2], [3, 4]]) scalar = 2 # 与标量进行逐元素加法 result_add = matrix_1 + scalar print(result_add) # 与标量进行逐元素乘法 result_mul = matrix_1 * scalar print(result_mul)
以下是得到的输出 -
与标量进行逐元素加法: [[3 4] [5 6]] 与标量进行逐元素乘法: [[2 4] [6 8]]
NumPy 中的广播
NumPy 中的广播允许对不同形状的矩阵执行运算,只要形状相同兼容。在不同形状的矩阵之间执行元素级运算时,NumPy 会自动将较小的矩阵"广播"到较大的矩阵。
例如,可以将一个一维数组添加到一个二维矩阵,NumPy 会在矩阵的所有行上重复该一维数组以执行该运算。但是,有一些特定的规则决定是否可以进行广播。
示例
假设我们有一个二维矩阵和一个一维数组。 NumPy 会将一维数组广播到二维矩阵,以进行元素级运算 -
import numpy as np # 定义两个矩阵 matrix_1 = np.array([[1, 2], [3, 4]]) array_1 = np.array([5, 6]) # 广播示例 result = matrix_1 + array_1 print(result)
以下是获得的输出 -
[[ 6 8] [ 8 10]]