在numpy中,矩阵乘法有多种使用方法,以下是详细介绍:
### np.dot()
- 若操作对象为一维数组,`np.dot()`求的是内积;若为二维数组,则进行矩阵乘法。需要注意的是,矩阵乘法要求第一个矩阵的列数和第二个矩阵的行数必须相同。示例代码如下:
```python
import numpy as np
# 一维数组内积
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
result_dot_1d = np.dot(a, b)
print("一维数组内积结果:", result_dot_1d)
# 二维数组矩阵乘法
ar1 = np.array([[1, 2, 3], [4, 5, 6]])
ar2 = np.array([[7, 8], [9, 10], [11, 12]])
result_dot_2d = np.dot(ar1, ar2)
print("二维数组矩阵乘法结果:\n", result_dot_2d)
```
### np.multiply()
此函数用于元素乘法,它以元素为单位乘以参数。若参数为数组,维度会对应相乘;若参数为常数,则数组的所有数值会对应发生变化。示例代码如下:
```python
import numpy as np
# 数组与数组元素乘法
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
result_multiply_arr = np.multiply(arr1, arr2)
print("数组与数组元素乘法结果:\n", result_multiply_arr)
# 数组与常数元素乘法
constant = 2
result_multiply_constant = np.multiply(arr1, constant)
print("数组与常数元素乘法结果:\n", result_multiply_constant)
```
### `*` 运算符
`*` 运算符并没有进行矩阵乘法,而是矩阵和矩阵的元素进行了相乘,要求参与运算的两个矩阵有相同的shape。示例代码如下:
```python
import numpy as np
ar3 = np.array([[1, 2], [3, 4]])
ar4 = np.array([[5, 6], [7, 8]])
result_star = ar3 * ar4
print("* 运算符元素相乘结果:\n", result_star)
```
### np.matmul()
`np.matmul()`主要用于二维矩阵的数学上的矩阵乘法。示例代码如下:
```python
import numpy as np
a = np.array([[80, 86], [82, 80], [85, 78], [90, 90], [86, 82], [82, 90], [78, 80], [92, 94]])
b = np.array([[0.7], [0.3]])
result_matmul = np.matmul(a, b)
print("np.matmul() 二维矩阵乘法结果:\n", result_matmul)
```
### `@` 表达式
`@` 表达式同样实现数学上的矩阵乘法。示例代码如下:
```python
import numpy as np
a = np.array([[80, 86], [82, 80], [85, 78], [90, 90], [86, 82], [82, 90], [78, 80], [92, 94]])
b = np.array([[0.7], [0.3]])
result_at = a @ b
print("@ 表达式矩阵乘法结果:\n", result_at)
```
此外,numpy.linalg中有一组标准的矩阵分解运算以及诸如求逆和行列式之类的东西,它们使用的是如BLAS、LAPACK、Intel MKL(Math Kernel Library,可能有,取决于NumPy版本)等行业标准线性代数库 [^2]。