- 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 中的一种运算,其中两个形状相同的数组相乘,并且运算应用于每对对应的元素。
为了执行逐元素乘法,两个数组必须具有相同的形状。如果数组的形状不同,则会应用广播规则以使它们兼容。
示例
在下面的示例中,我们将数组a的每个元素乘以数组b中对应的元素 -
import numpy as np # Creating two arrays a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) # Performing element-wise multiplication result = a * b print(result)
以下是获得的输出 -
[ 4 10 18]
在 NumPy 中乘以标量
标量乘法是指将数组的每个元素乘以单个标量值。数组中的每个元素都乘以标量值,从而产生一个新数组,其中所有元素都相应地缩放。
结果数组的形状与原始数组相同,但每个元素都按标量缩放。
示例
在此示例中,我们将标量“3”乘以数组“a”的每个元素 -
import numpy as np # Creating an array a = np.array([1, 2, 3]) # Multiplying by a scalar result = a * 3 print(result)
这将产生以下结果 -
[3 6 9]
乘以不同形状的 NumPy 数组
当乘以不同形状的数组时,NumPy 使用广播使形状与逐元素运算兼容。广播从最右侧对齐维度,根据特定规则调整形状,并顺利执行运算。
示例
在下面的示例中,数组“b”被广播以匹配数组“a”的形状,然后执行逐元素乘法 -
import numpy as np # Creating arrays with different shapes a = np.array([[1, 2, 3], [4, 5, 6]]) b = np.array([10, 20, 30]) # Multiplying arrays with broadcasting result = a * b print(result)
以下是上述代码的输出 -
[[10 40 90] [40 100 180]]
NumPy 中的矩阵乘法
矩阵乘法是线性代数中的一种运算,其中两个矩阵根据特定规则相乘。在 NumPy 中,此运算使用np.dot()函数、@运算符或np.matmul()函数执行。
为了使矩阵乘法有效,第一个矩阵的列数必须等于第二个矩阵的行数。如果矩阵A的形状为(m, n),而矩阵B的形状为(n, p),则结果矩阵的形状将为(m, p)。
示例:使用 numpy.dot() 函数
NumPy 中的 np.dot() 函数用于计算两个数组的点积。它处理 2D 数组的矩阵乘法和 1D 数组的点积 -
import numpy as np # Define two matrices matrix1 = np.array([[1, 2], [3, 4]]) matrix2 = np.array([[5, 6], [7, 8]]) # Perform matrix multiplication using np.dot result = np.dot(matrix1, matrix2) print(result)
获得的输出如下所示 -
[[19 22] [43 50]]
示例:使用“@”运算符
NumPy 中的@运算符为 np.dot() 函数提供了一种简写。它对 2D 数组执行矩阵乘法,并用于计算 1D 数组的点积 -
import numpy as np # Define the same matrices matrix1 = np.array([[1, 2], [3, 4]]) matrix2 = np.array([[5, 6], [7, 8]]) # Perform matrix multiplication using the @ operator result = matrix1 @ matrix2 print(result)
执行上述代码后,我们将获得以下输出 -
[[19 22] [43 50]]
示例:使用 np.matmul() 函数
np.matmul()函数可以通过对输入数组的最后两个维度执行矩阵乘法来处理具有多个维度的数组,并根据需要广播任何前面的维度 -
import numpy as np # Define a 3D array and a 2D array array_3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]) array_2d = np.array([[1, 0], [0, 1]]) # Perform matrix multiplication using np.matmul result = np.matmul(array_3d, array_2d) print(result)
产生的结果如下 -
[[[1 2] [3 4]] [[5 6] [7 8]]]
逐元素乘法与矩阵乘法
区分逐元素乘法(使用 *)和矩阵乘法(使用 @ 或 np.dot())非常重要 -
逐元素乘法 - 第一个数组中的每个元素都乘以第二个数组中对应的元素。
矩阵乘法 - 执行行和列的点积,遵循线性代数规则。
示例
在此示例中,我们重点介绍了逐元素乘法和矩阵乘法之间的区别 -
import numpy as np # Creating two 2D arrays a = np.array([[1, 2], [3, 4]]) b = np.array([[5, 6], [7, 8]]) # Element-wise multiplication element_wise_result = a * b print("Element-wise multiplication:\n", element_wise_result) # Matrix multiplication matrix_result = np.dot(a, b) print("Matrix multiplication:\n", matrix_result)
我们得到如下所示的输出 -
Element-wise multiplication: [[ 5 12] [21 32]] Matrix multiplication: [[19 22] [43 50]]
乘以具有不同数据类型的数组
当在 NumPy 中乘以具有不同数据类型的数组时,会应用类型强制规则以确保可以执行运算。此过程包括在执行乘法之前将数组转换为通用数据类型。
NumPy 使用一组提升规则来确定结果的数据类型。一般规则是将操作数转换为可以容纳结果而不会丢失精度的类型。以下是提升顺序 -
Boolean → Integer → Floating-point → Complex.
例如,整数和浮点数被提升为浮点数类型以容纳小数值。
示例
在这种情况下,NumPy 将整数数组b提升为浮点类型以匹配数组a的数据类型 -
import numpy as np # Creating arrays with different data types a = np.array([1.5, 2.5, 3.5]) b = np.array([2, 3, 4], dtype=np.int32) # Performing multiplication result = a * b print(result)
以下是获得的输出 -
[3. 7.5 14.]
处理乘法中的维度不匹配
当在 NumPy 中执行数组之间的乘法运算时,如果数组不共享兼容的形状,则可能发生维度不匹配。NumPy 通过广播解决此问题,并在这种情况下引发ValueError。
示例
在下面的示例中,“a”和“b”的形状不兼容广播,导致错误 -
import numpy as np # Creating arrays with incompatible shapes a = np.array([1, 2, 3]) b = np.array([[1, 2], [3, 4]]) # Attempting to multiply incompatible arrays result = a * b print(result)
产生的结果如下 -
Traceback (most recent call last):File "/home/cg/root/66a1de2fae52f/main.py", line 8, in <module>result = a * bValueError: operands could not be broadcast together with shapes (3,) (2,2)