使用 NumPy 通过奇异值分解计算给定数组的因子
numpyserver side programmingprogramming
奇异值分解 (SVD) 是一种矩阵分解技术,它将矩阵分为三个部分,即左奇异矩阵、对角奇异矩阵和右奇异矩阵。
SVD 是线性代数中使用的强大工具,它在数据分析、机器学习和信号处理中有许多应用。这主要用于计算矩阵的秩,以及执行线性方程和执行图像压缩等更多操作。
计算奇异值分解
如果我们组成一个大小为 m x n 的实数或复数矩阵 A,则奇异值分解将计算以下因式分解。
A = U * S * V ^T
其中
U 是大小为 m x m 的正交矩阵,包含 A 的左奇异向量。
S 是大小为 m x n 的对角矩阵,包含 A 的奇异值。
V^T 是大小为 n x n 的正交矩阵包含 A 的右奇异向量。
奇异向量 U 和 V^T 是正交的,即它们具有单位长度并且彼此垂直。奇异值沿 S(对角矩阵)的对角线按降序排列。
Numpy 中的奇异值分解
python 中的 Numpy 库提供了 linalg 模块。该模块提供了很多函数,其中之一就是SVD(),用于计算给定矩阵的奇异值分解。
语法
以下是计算给定矩阵奇异值分解的语法。
import numpy as np np.linalg.svd(matrix)
其中,
numpy 是库的名称。
np 是numpy的别名。
linalg 是模块。
svd是用于计算的函数奇异值分解。
matrix 是输入矩阵。
示例
当我们想要计算奇异值分解 (SVD) 时,我们必须将矩阵作为输入参数传递给 svd() 函数。
import numpy as np matrix = np.arange(4,8).reshape(2,2) singular_v_d = np.linalg.svd(matrix) print("给定 2x2 方阵的奇异值分解:",singular_v_d)
输出
当我们运行上述代码时,将显示以下输出,我们可以观察到三个数组,第一个数组是左奇异数组,第二个是对角奇异值,最后一个数组是右奇异矩阵。
给定 2x2 方阵的奇异值分解: (array([[-0.57035846, -0.8213959 ], [-0.8213959 , 0.57035846]]), array([11.22355763, 0.17819662]), array([[-0.64238181, -0.76638477], [ 0.76638477, -0.64238181]]))
示例
让我们看另一个示例使用 linalg 模块的 svd() 函数计算奇异值分解。
import numpy as np matrix = np.array([[1,23,4],[5,34,56]]) singular_v_d = np.linalg.svd(matrix) print("给定矩阵的奇异值分解:",singular_v_d)
输出
The singular value decomposition of the given 2x2 square matrix: (array([[-0.24361576, 0.96987183], [-0.96987183, -0.24361576]]), array([67.60877519, 17.08957337]), array([[-0.07533009, -0.5706183 , -0.8177531 ], [-0.01452389, 0.82062411, -0.57128375], [-0.99705287, 0.0311579 , 0.07010528]]))
示例
让我们看另一个使用 svd() 函数计算给定矩阵的奇异值分解的示例。
import numpy as np matrix = np.array([[[12,34,23],[23,54,34]],[[10,23,24],[56,68,34]]]) singular_v_d = np.linalg.svd(matrix) print("给定矩阵的奇异值分解:",singular_v_d)
输出
给定矩阵的奇异值分解: (array([[[-0.53294435, -0.84615029], [-0.84615029, 0.53294435]], [[-0.32001136, -0.94741371], [-0.94741371, 0.32001136]]]), array([[80.14845114, 2.49515114], [99.54423363, 14.55834985]]), array([[[-0.32261121, -0.79617538, -0.5118855 ], [ 0.84320202, 0.0039616 , -0.53758224], [ 0.43003763, -0.60505294, 0.67005863]], [[-0.56512848, -0.7211306 , -0.40074987], [ 0.58018245, -0.00204301, -0.81448398], [ 0.58653059, -0.69279613, 0.41954188]]]))