我有以下代码来计算每个向量的正交向量,这些向量来自i,j维矩阵.因此,矩阵中的每一行都是一个向量.这是代码:
for i in range(data.shape[0]):
for j in range(data.shape[1]):
s=0 #row counter set to 0
if j == data.shape[1]-1: #check if last row element has been reached
for k in range(j): #compute the sum of all previous values.
s=s+data2[i][k]*data[i][k]
data2[i][j] = -s/data[i][k]
else:
data2[i][j] = random.uniform(1,random.getrandbits(10))
dot(data[i],data2[i])
但这不起作用,因为点函数很少返回0,这应该是矢量正交的情况.我看不到代码逻辑的流程.我只是将j-1个随机元素固定为正交向量的系数,然后为了找到最后一个系数,我求解了一个简单的方程式,该方程式是随机元素先前的系数与向量的系数除以的乘积最后一个系数. a1r1 a2r3 … anrn = 0.我知道艾的我修复了随机的i-1 ri,然后我解决了1 var方程线性问题,发现ri向量比ri向量与a1向量正交.我得到的最后一个点积计算的结果采用以下形式:
===================================================
8.90285882653
===================================================
15.1275777619
===================================================
25.0847305913
===================================================
30.8608285102
===================================================
35.2496752739
===================================================
-53.3796252747
===================================================
16.302777
===================================================
29.3607765359
===================================================
-39.8982101139
===================================================
42.97222625
解决方法:
这可行.我编辑了一点代码(摆脱了var,现在称为商),但是唯一的错误是在k到矢量的总长度减去2的范围内,而不是倒数第二个一个元素.请注意,在任何情况下,此方法都不可靠.
for i in range(data.shape[0]):
for j in range(data.shape[1]):
if j == data.shape[1]-1: #check if last row element
quotient=(data2[i][:-1]*data[i][:-1]).sum()
data2[i][j] = -quotient/data[i][-1]
else:
data2[i][j] = random.uniform(1)
print dot(data[i],data2[i])