3

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。aiのことは知っています。ランダムな i-1 ri を修正してから、1 var 方程式の線形問題を解いて、ri ベクトルが a1 ベクトルに直交する以外の rn を見つけます。私が取得している最後の内積計算の結果は、次の形式になっています。

===================================================
8.90285882653
===================================================
15.1275777619
===================================================
25.0847305913
===================================================
30.8608285102
===================================================
35.2496752739
===================================================
-53.3796252747
===================================================
16.302777
===================================================
29.3607765359
===================================================
-39.8982101139
===================================================
42.97222625
4

1 に答える 1

4

これは機能します。私はあなたのコードを少し編集しました(現在は商と呼ばれるvar sを取り除きました)が、唯一のエラーはkからベクトルの全長マイナス2までの範囲であり、最後から2番目までではありませんでした1 つの要素。いずれにせよ、この方法は堅牢ではないことに注意してください。

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])
于 2013-06-25T12:49:55.570 に答える