如何找到属于非方阵的空 space 的线性无关向量? (Python)
How to find linearly independent vectors belonging to the null space of a non-square matrix? (Python)
我有一个非方矩阵,以及确定矩阵的空值 space 的方法(从这个线程中找到:How to find the Null Space Python 中使用 numpy 的矩阵?
),但我在采用此解决方案时遇到了一些问题。
首先,我不确定我的值是否正确,因为我不太确定我在寻找什么。
其次,我需要从这个 null space 中找到两个线性无关的向量,但我不知道从这里下一步要确定这个。
最后,我需要确定矩阵的任何列在 R3 和 R4 中是否线性无关。
如有任何帮助,我们将不胜感激。
代码:
import numpy as np
import scipy as sp
from scipy import linalg
a = np.matrix(
[
[ 3, 2, -1, 4],
[ 1, 0, 2, 3],
[-2, -2, 3, -1]
])
def null(A, eps=1e-15):
u, s, vh = linalg.svd(A)
null_mask = (s <= eps)
null_space = sp.compress(null_mask, vh, axis=0)
return sp.transpose(null_space)
print(null(a))
输出:
[[ 0.8290113 ]
[-0.2330726 ]
[ 0.24969281]
[-0.44279897]]
我假设因为输出不是空矩阵[],所以这个矩阵有一些特别之处,我只是不知道它是什么意思。
在这种情况下,我建议使用 sympy:
from sympy import Matrix
a = Matrix([
[ 3, 2, -1, 4],
[ 1, 0, 2, 3],
[-2, -2, 3, -1]
])
print(a.nullspace())
输出:
[Matrix([
[ -2],
[7/2],
[ 1],
[ 0]]),
Matrix([
[ -3],
[5/2],
[ 0],
[ 1]])]
您可以轻松地检查结果是否确实属于零空间,方法是在与矩阵相乘时明确检查它是否映射到 0 a
:
n1, n2 = a.nullspace()
print(a*n1, a*n2)
结果:
Matrix([[0], [0], [0]]) Matrix([[0], [0], [0]])
最后,要在 R3 中获得矩阵的线性独立列,您可以使用函数 columnspace
,其中 returns 跨越矩阵列空间的列向量列表
print(a.columnspace())
结果
[Matrix([
[ 3],
[ 1],
[-2]]), Matrix([
[ 2],
[ 0],
[-2]])]
这是矩阵的前两列。
我有一个非方矩阵,以及确定矩阵的空值 space 的方法(从这个线程中找到:How to find the Null Space Python 中使用 numpy 的矩阵? ),但我在采用此解决方案时遇到了一些问题。
首先,我不确定我的值是否正确,因为我不太确定我在寻找什么。
其次,我需要从这个 null space 中找到两个线性无关的向量,但我不知道从这里下一步要确定这个。
最后,我需要确定矩阵的任何列在 R3 和 R4 中是否线性无关。
如有任何帮助,我们将不胜感激。
代码:
import numpy as np
import scipy as sp
from scipy import linalg
a = np.matrix(
[
[ 3, 2, -1, 4],
[ 1, 0, 2, 3],
[-2, -2, 3, -1]
])
def null(A, eps=1e-15):
u, s, vh = linalg.svd(A)
null_mask = (s <= eps)
null_space = sp.compress(null_mask, vh, axis=0)
return sp.transpose(null_space)
print(null(a))
输出:
[[ 0.8290113 ]
[-0.2330726 ]
[ 0.24969281]
[-0.44279897]]
我假设因为输出不是空矩阵[],所以这个矩阵有一些特别之处,我只是不知道它是什么意思。
在这种情况下,我建议使用 sympy:
from sympy import Matrix
a = Matrix([
[ 3, 2, -1, 4],
[ 1, 0, 2, 3],
[-2, -2, 3, -1]
])
print(a.nullspace())
输出:
[Matrix([
[ -2],
[7/2],
[ 1],
[ 0]]),
Matrix([
[ -3],
[5/2],
[ 0],
[ 1]])]
您可以轻松地检查结果是否确实属于零空间,方法是在与矩阵相乘时明确检查它是否映射到 0 a
:
n1, n2 = a.nullspace()
print(a*n1, a*n2)
结果:
Matrix([[0], [0], [0]]) Matrix([[0], [0], [0]])
最后,要在 R3 中获得矩阵的线性独立列,您可以使用函数 columnspace
,其中 returns 跨越矩阵列空间的列向量列表
print(a.columnspace())
结果
[Matrix([
[ 3],
[ 1],
[-2]]), Matrix([
[ 2],
[ 0],
[-2]])]
这是矩阵的前两列。