获取 np.linalg.svd 的奇异值作为矩阵
Getting the singular values of np.linalg.svd as a matrix
给定一个 5x4 矩阵 A =
一段python构造矩阵的代码
A = np.array([[1, 0, 0, 0],
[0, 0, 0, 4],
[0, 3, 0, 0],
[0, 0, 0, 0],
[2, 0, 0, 0]])
wolframalpha 给出 svd 结果
具有奇异值 Σ 的 Vector(s) 是这种形式
np.linalg.svd
输出中的等效数量(NumPy称之为s)是这种形式
[ 4. 3. 2.23606798 -0. ]
有没有办法让 numpy.linalg.svd 的输出数量显示为 wolframalpha?
您可以通过 diag
:
完成大部分工作
>>> u, s, vh = np.linalg.svd(a)
>>> np.diag(s)
array([[ 4. , 0. , 0. , 0. ],
[ 0. , 3. , 0. , 0. ],
[ 0. , 0. , 2.23606798, 0. ],
[ 0. , 0. , 0. , -0. ]])
请注意,wolfram alpha 提供了额外的一行。获得它稍微复杂一点:
>>> sigma = np.zeros(A.shape, s.dtype)
>>> np.fill_diagonal(sigma, s)
>>> sigma
array([[ 4. , 0. , 0. , 0. ],
[ 0. , 3. , 0. , 0. ],
[ 0. , 0. , 2.23606798, 0. ],
[ 0. , 0. , 0. , -0. ],
[ 0. , 0. , 0. , 0. ]])
根据您的目标,从 U 中删除一列可能比向 sigma 添加一行零更好。看起来像:
>>> u, s, vh = np.linalg.svd(a, full_matrices=False)
给定一个 5x4 矩阵 A =
一段python构造矩阵的代码
A = np.array([[1, 0, 0, 0],
[0, 0, 0, 4],
[0, 3, 0, 0],
[0, 0, 0, 0],
[2, 0, 0, 0]])
wolframalpha 给出 svd 结果
具有奇异值 Σ 的 Vector(s) 是这种形式
np.linalg.svd
输出中的等效数量(NumPy称之为s)是这种形式
[ 4. 3. 2.23606798 -0. ]
有没有办法让 numpy.linalg.svd 的输出数量显示为 wolframalpha?
您可以通过 diag
:
>>> u, s, vh = np.linalg.svd(a)
>>> np.diag(s)
array([[ 4. , 0. , 0. , 0. ],
[ 0. , 3. , 0. , 0. ],
[ 0. , 0. , 2.23606798, 0. ],
[ 0. , 0. , 0. , -0. ]])
请注意,wolfram alpha 提供了额外的一行。获得它稍微复杂一点:
>>> sigma = np.zeros(A.shape, s.dtype)
>>> np.fill_diagonal(sigma, s)
>>> sigma
array([[ 4. , 0. , 0. , 0. ],
[ 0. , 3. , 0. , 0. ],
[ 0. , 0. , 2.23606798, 0. ],
[ 0. , 0. , 0. , -0. ],
[ 0. , 0. , 0. , 0. ]])
根据您的目标,从 U 中删除一列可能比向 sigma 添加一行零更好。看起来像:
>>> u, s, vh = np.linalg.svd(a, full_matrices=False)