试图找出两个向量是线性相关的还是独立的。我经常遇到这样的错误:“数组的最后两个维度必须是正方形?有人能解释一下吗?”
def Indy2Vec(v1, v2):
A = np.array([v1])
B = np.array([v2])
print(A)
#A =np.linalg.matrix_rank(A)
A=np.linalg.solve(A,B)
return A
v1 = np.array([0, 5, 0])
v2 = np.array([0, -10, 0])
v3 = np.array([1, 2, 3])
v4 = np.array([-2, -4, -6])
Indy2Vec(v1,v2)
错误的问题陈述
看来你解决的问题不对。如您所述,它不能像您正在使用的method那样工作:
如文件中所定义
把你的问题写成
Ax = b
是很诱人的。但是你需要一个3x3矩阵来测试一个向量b=[0,0,0]T
,并找到一个非平凡的解x
来声明所有三个向量不是线性独立的。但这意味着矩阵没有满秩在您的代码中,以下表达式无法实现函数签名:
并引发以下错误:
根据矩阵形状对
numpy.linalg.solve
的有效调用是:但在两个方面都失败了:
首先,因为矩阵不是满秩的,因此不可逆。其次,这并不能解决两个向量的问题
一般解决方案
相反,您希望解决一个关于linear independence的更一般的问题,这个问题可以通过评估^{cd5>}的rank来解决:
使用numpy,您可以使用numpy.linalg.matrix_rank执行此操作:
此方法计算执行SVD decomposition计算的空奇异值,该算法的实现由scipy.linalg.svd提供:
或者执行Gauss Elimination(比如使用LU decomposition)并检查结果。包scipy提供了scipy.linalg.lu:
所有这些方法都评估从矩阵列跨越的向量空间的维数。如果矩阵是满秩的,那么向量是线性独立的。如果不是,则至少有两个相关向量
那么解决问题的简单方法是:
特例
如果您停留在3D向量空间中,只需要对照两个向量进行检查,您还可以利用numpy.cross提供的cross product:
更具体的备选方案是:
恒定比率
正如
@MadPhycist
所建议的,我们还可以评估共线向量共享标量比例因子(如a = k*b
)的事实,然后一种非防弹的测试方法是检查坐标比是否恒定:如果它比以前的解决方案需要更少的计算量,并且不依赖高水平的线性代数,那么它需要处理特定的情况,并且建议的实现很难闻(不要使用它)
格拉米安法
由
@dmuir
公开的方法可以安全地针对以下两个向量实现:两个向量的简单测试为: A和B是线性相关的
在哪里。是点积
当然,在使用浮点运算时,必须小心测试等式
这可以推广到更多的向量。V[1]。。当其Gramian G为单数时,V[n]是线性相关的,其中
为什么不使用更简单的算法:
相关问题 更多 >
编程相关推荐