python - 如何找到属于非方阵零空间的线性无关向量? (Python)

标签 python numpy matrix scipy algebra

我有一个非方矩阵和一个确定矩阵零空间的方法(从这个线程中找到:How to find the Null Space of a matrix in Python using numpy? ),但是我在采用这个解决方案时遇到了一些问题。

首先,我不确定我的值是否正确,因为我不太确定我在寻找什么。

其次,我需要从这个零空间中找到两个线性无关的向量,但我不知道从这里下一步要确定这个。

最后,我需要确定矩阵的任何列在 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]])]

您可以轻松检查结果是否确实属于零空间,方法是在与矩阵 a 相乘时显式检查结果是否映射到 0:

n1, n2 = a.nullspace()
print(a*n1, a*n2) 

结果:

Matrix([[0], [0], [0]]) Matrix([[0], [0], [0]])

最后,要在 R3 中获得矩阵的线性无关列,您可以使用函数 columnspace,它返回跨越矩阵列空间的列向量列表

print(a.columnspace())

结果

[Matrix([
[ 3],
[ 1],
[-2]]), Matrix([
[ 2],
[ 0],
[-2]])]

这是矩阵的前两列。

关于python - 如何找到属于非方阵零空间的线性无关向量? (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52691465/

相关文章:

python - 如何创建或更新列

python - 开放量子系统建模

arrays - 生成一个矩阵,其中包含从 n 个向量中获取的元素的所有组合

python - 如何在目录中的所有文件上运行 python 脚本?

python - Flake8 提示 "Undefined Variable"关于内置函数

Python:快速离散插值

python - 如何将 numpy 数组转换为标准 TensorFlow 格式?

python - 从 errbot 将数据返回到 Slack

python - django 如何全局使用变量

c++ - 如何从 C++ 文件中读取矩阵?