如何确定两个向量在python中是线性相关还是独立的?

问题描述

接受两个3维向量,每个向量都表示为一个数组,并判断它们是否线性独立。我试图使用np.linalg.solve()获得x的解,并试图确定x是平凡的还是不平凡的。但它显示“ LinAlgError:数组的最后2个尺寸必须为正方形”。谁能帮我解决这个问题?

from sympy import *
import numpy as np
from scipy import linalg
from numpy import linalg

v1 = np.array([0,5,0])
v2 = np.array([0,-10,0])
a = np.array([v1,v2])
b = np.zeros(3)
x = np.linalg.solve(a,b)

解决方法

由于最终矩阵将为矩形,因此无法使用简单的EigenValues方法。您需要使用sympy库

import sympy 
import numpy as np
matrix = np.array([
  [0,5,0],[0,-10,0]
])

_,indexes = sympy.Matrix(matrix).T.rref()  # T is for transpose
print(indexes)

这将打印线性独立行的索引。要从矩阵中进一步打印它们,请使用

print(matrix[indexes,:])

要回答您的特定问题,请检查两个向量是否线性相关。如果您始终要检查两个向量,则可以绝对使用if语句。

if len(indexes) == 2:
    print("linearly independant")
else:
    print("linearly dependant")
,

如果矩阵的一个特征值是零,则其对应的特征向量是线性相关的。

因此以下代码适用于简单情况:

rows: i_col(0) / original_a(1) / freqs(2) / sorted_a(3)
    / sorted_freqs(4) / sorting_ix(5)
[[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
 [ 1  1  1  1  3  0  5  0  3  1  1  0  0  4  6  1  3  5  5  0  0  0  5  0]
 [ 7  7  7  7  3  8  4  8  3  7  7  8  8  1  1  7  3  4  4  8  8  8  4  8]
 [ 0  0  0  0  0  0  0  0  1  1  1  1  1  1  1  5  5  5  5  3  3  3  4  6]
 [ 8  8  8  8  8  8  8  8  7  7  7  7  7  7  7  4  4  4  4  3  3  3  1  1]
 [ 5  7 11 12 19 20 21 23  0  1  2  3  9 10 15  6 17 18 22  4  8 16 13 14]]

输出:[[0 1 1 0]]