Python中np.multiply()、np.dot()与星号(*)乘法的区别

纸上星河
纸上星河
发布时间:2026-10-11 | 3人浏览过
原创

本文详细解析Python中NumPy库的三种乘法运算:np.multiply()、np.dot()以及星号(*)。通过对比数组与矩阵在不同运算下的行为,阐明元素级乘法与矩阵乘法的区别,并提供具体的代码示例与结果分析,帮助开发者准确选择适合的乘法方式。

1. np.multiply():元素级乘法

np.multiply() 函数专门用于执行数组或矩阵的对应位置元素相乘(Hadamard product)。其输出结果的形状与输入数组或矩阵的形状完全一致。无论是处理一维数组还是多维矩阵,该函数均执行逐元素运算。

数组场景示例

当输入为普通 NumPy 数组时,np.multiply() 执行逐元素相乘:

A = np.arange(1,5).reshape(2,2)
B = np.arange(0,4).reshape(2,2)
np.multiply(A,B)

假设 A 为 [[1, 2], [3, 4]],B 为 [[0, 1], [2, 3]],则计算结果为 [[0, 2], [6, 12]]。

矩阵场景示例

若需对矩阵执行相同的逐元素乘法,可先将数组转换为矩阵对象(使用 np.mat()),再调用 np.multiply():

np.multiply(np.mat(A), np.mat(B))

结果同样为 [[0, 2], [6, 12]]。若需获取所有元素的总和,可进一步使用 np.sum():

np.sum(np.multiply(np.mat(A), np.mat(B)))

此时输出为一个标量值。

2. np.dot():矩阵乘法与点积

np.dot() 的行为取决于输入数组的秩(维度):

  • 秩为1的数组(一维向量):执行对应位置元素相乘后求和,即数学上的点积(Dot Product)。
  • 秩不为1的数组(二维及以上矩阵):执行标准的矩阵乘法运算。

二维数组(矩阵)乘法

对于二维数组,np.dot() 执行矩阵乘法。例如:

A = np.arange(1,5).reshape(2,2)
B = np.arange(0,4).reshape(2,2)
np.dot(A,B)

计算结果为 [[4, 7], [8, 15]]。若使用矩阵对象 np.mat(A) 和 np.mat(B),结果相同。

一维数组点积

对于一维数组,np.dot() 计算点积。例如:

C = np.arange(1,4)
D = np.arange(0,3)
np.dot(C,D)

计算过程为 (1*0) + (2*1) + (3*2) = 8,输出结果为标量 8。

3. 星号(*)运算:语法糖与类型依赖

在 Python 中,星号 * 的行为取决于操作数的类型。它是 NumPy 中一种便捷的语法,但其具体执行逻辑随数据类型变化:

  • 对数组(ndarray):执行对应位置元素相乘(与 np.multiply() 行为一致)。
  • 对矩阵(matrix):执行矩阵乘法运算(与 np.dot() 对矩阵的行为一致)。

数组场景

当操作数为普通数组时,* 执行逐元素乘法:

A = np.arange(1,5).reshape(2,2)
B = np.arange(0,4).reshape(2,2)
A * B

结果为 [[0, 2], [6, 12]]。

矩阵场景

当操作数被转换为矩阵对象时,* 执行矩阵乘法:

(np.mat(A)) * (np.mat(B))

结果为 [[4, 7], [8, 15]]。

总结

选择哪种乘法方式取决于你的数据类型和计算目标:

  • 若需逐元素相乘,无论数组或矩阵,均使用 np.multiply()。
  • 若需执行矩阵乘法,对二维数组使用 np.dot() 或转换为矩阵后使用 *。
  • 若处理一维数组并需计算点积,使用 np.dot()。
  • 注意 * 的行为随类型变化,建议在明确数据类型的前提下使用,以避免混淆。

以上就是Python中np.multiply()、np.dot()和星号(*)三种乘法运算的区别详解的详细内容,更多关于Python NumPy乘法运算的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表