使用 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 的右奇异向量。

奇异向量 UV^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]]]))


相关文章