利用numpy库编写两个函数,分别实现特征分解和奇异值分解。具体要求如下: (1)输入为一个矩阵(ndarray格式),输出为分解后的2个(特征分解)或3个(SVD)矩阵。
时间: 2024-01-24 22:04:47 浏览: 79
以下是特征分解和奇异值分解的Python代码实现,使用了NumPy库:
```python
import numpy as np
def eig_decomposition(matrix):
"""
实现矩阵的特征分解,返回特征值和特征向量组成的元组
参数:
matrix: numpy.ndarray
一个n x n的矩阵
返回值:
Tuple(numpy.ndarray, numpy.ndarray)
一个元组,包含特征值和特征向量
"""
eigenvalues, eigenvectors = np.linalg.eig(matrix)
return eigenvalues, eigenvectors
def svd_decomposition(matrix):
"""
实现矩阵的奇异值分解,返回左、右奇异向量和奇异值组成的元组
参数:
matrix: numpy.ndarray
一个m x n的矩阵
返回值:
Tuple(numpy.ndarray, numpy.ndarray, numpy.ndarray)
一个元组,包含左奇异向量、奇异值和右奇异向量
"""
u, s, vh = np.linalg.svd(matrix)
return u, s, vh
```
以上两个函数分别实现了矩阵的特征分解和奇异值分解。它们的参数都是一个NumPy数组,表示要分解的矩阵。特征分解函数返回一个元组,包含特征值和特征向量;奇异值分解函数返回一个元组,包含左奇异向量、奇异值和右奇异向量。
这些函数可以通过以下方式调用:
```python
# 随机生成一个3 x 3的矩阵
matrix = np.random.rand(3, 3)
# 进行特征分解
eigenvalues, eigenvectors = eig_decomposition(matrix)
# 进行奇异值分解
u, s, vh = svd_decomposition(matrix)
```
注意,这些函数的返回值是NumPy数组,因此可以像普通数组一样使用它们。例如,要访问特征向量的第一个向量,可以使用以下代码:
```python
first_eigenvector = eigenvectors[:, 0]
```
同样地,要访问奇异值的第一个值,可以使用以下代码:
```python
first_singular_value = s[0]
```
阅读全文