Numpy中np.dot与np.matmul的区别详解(图文)
NumPy 是 Python 中广泛使用的科学计算库,它提供了两个用于执行矩阵乘法的函数:np.dot()
和 np.matmul()
。这两个函数虽然都可以用于矩阵乘法,但它们之间存在一些差异,下面我们详细介绍它们的区别。
底层原理:
np.dot()
:np.dot()
函数是 NumPy 提供的一个通用的点积函数,可以用于计算向量的点积、矩阵乘法等。- 它的底层实现依赖于 BLAS (Basic Linear Algebra Subprograms) 库,这是一个高度优化的线性代数计算库。
np.dot()
可以处理不同维度的输入,如向量和矩阵的乘法,以及较为复杂的高维数组的点积计算。
np.matmul()
:np.matmul()
函数是 NumPy 2.0 版本引入的专门用于矩阵乘法的函数。- 它的底层实现也依赖于 BLAS 库,但与
np.dot()
相比,np.matmul()
更加关注于矩阵乘法这一特定的线性代数运算。 np.matmul()
只能处理二维数组(矩阵),不支持向量或高维数组的点积计算。
使用步骤:
- 导入 NumPy 库: 在使用
np.dot()
或np.matmul()
之前,需要先导入 NumPy 库,通常使用import numpy as np
。 - 准备输入数据: 根据需求,准备好要进行矩阵乘法运算的输入数据,通常是 NumPy 数组。
- 选择合适的函数: 根据输入数据的维度和具体需求,选择使用
np.dot()
还是np.matmul()
。 - 执行矩阵乘法运算: 调用选择的函数,传入输入数据,获取计算结果。
- 处理结果: 根据需求,对计算结果进行进一步的数据处理和分析。
示例代码:
import numpy as np
# 示例 1: 向量和矩阵的乘法
v = np.array([1, 2, 3])
M = np.array([[1, 4, 7],
[2, 5, 8],
[3, 6, 9]])
# 使用 np.dot()
result_dot = np.dot(v, M)
print("np.dot() result:", result_dot)
# Output: np.dot() result: [14 32 50]
# 使用 np.matmul()
result_matmul = np.matmul(v, M)
print("np.matmul() result:", result_matmul)
# Output: np.matmul() result: [14 32 50]
# 示例 2: 两个矩阵的乘法
A = np.array([[1, 2],
[3, 4]])
B = np.array([[5, 6],
[7, 8]])
# 使用 np.dot()
result_dot = np.dot(A, B)
print("np.dot() result:\n", result_dot)
# Output: np.dot() result:
# [[19 22]
# [43 50]]
# 使用 np.matmul()
result_matmul = np.matmul(A, B)
print("np.matmul() result:\n", result_matmul)
# Output: np.matmul() result:
# [[19 22]
# [43 50]]
在这个示例中,我们演示了 np.dot()
和 np.matmul()
在不同场景下的使用。
在第一个示例中,我们进行了向量和矩阵的乘法。可以看到,两个函数的结果是一致的。
在第二个示例中,我们进行了两个矩阵的乘法。同样地,两个函数的结果也是一致的。
从这些示例中,我们可以看出 np.dot()
和 np.matmul()
在大多数情况下会给出相同的结果。但是,当输入数据的维度不同时,它们的行为可能会有所不同。
总的来说,np.matmul()
更加专注于矩阵乘法这一特定的线性代数运算,而 np.dot()
则更加通用,可以处理更广泛的向量和矩阵运算。根据具体的需求,选择合适的函数来执行矩阵乘法操作。
详解pandas.read_csv()(读取CSV文件)函数使用方法(图文详解1)
详解dataframe apply,pandas.DataFrame.apply()(应用函数到数据框)函数使用方法(图文详解1)