2017-09-19 7 views
-2

私はPaperの2つの公式をPythonで使いたいと思います。数式をPythonに変換するには?

この式: enter image description here

私は、このコードにそれを翻訳:

P = A    #(size 24x24) 
Q = B    #(size 24x24) 
sum_of_all = 0 
    for row in range(0,P.shape[0]): 
     for column in range (0,P.shape[1]): 
      zwischen =(w.iloc[row] * np.power((abs(P[row, column])-abs(Q[row,column])),2))[0] 
      sum_of_all = sum_of_all +zwischen 
res = np.sqrt(sum_of_all) 

他の式:

enter image description here

が、私はこのコードに翻訳

P = A 
Q = B 
sum_of_all = 0 
for row in range(0,P.shape[0]): 
    for column in range (0,P.shape[1]): 
     zwischen = P[row, column]*Q[row,column] 
     sum_of_all = sum_of_all +zwischen 
sum_of_all = (w.iloc[row])[0]*abs(sum_of_all)   
res = np.sqrt(2-(2*sum_of_all)) 
  1. 私はそれを正しく行いましたか?

  2. Pythonの方法で(特にFormula 1)、実際に頻繁に(30000回)使用され、ループが非常に遅くなっているので、どのように変更できますか?

+0

なぜあなたはパンダのデータフレームにあなたの体重がありますか? –

+0

なぜですか?それがデータフレームまたはnumpy配列であれば違いがありますか? –

+0

パフォーマンスを心配する場合は、ジョブを実行する最小のデータ構造にしてください。数が少ない配列に行くとき余計に余分になることはありませんが。また、コードをどのように解釈して維持するのも簡単です。さもなければ、最初の "関数"では、stdライブラリから明らかに離れているabsの代わりに、適切なnumpyのelement-wise abs関数を使って行列AとBの絶対値を事前計算する必要があります。輸入品は表示されません)。その後、forループの代わりにnumpyを使って減算を行うこともできます。 –

答えて

1

numpyを使用すると、「うまくいく」ということがたくさんあります。今、あなたは何のテストデータを与えなかったように私は実際にこれをテストすることができませんでしたが、最初の式は、それは大規模な問題であなたの重みは、データフレームまたはnumpyの配列である場合はいけない

P = np.random.rand(24, 24) 
Q = np.random.rand(24, 24) 
w = np.random.rand(24, 1) 

np.sqrt(np.sum((w * np.power((np.abs(P) - np.abs(Q)), 2)))) 

のようなものでなければなりません - データフレームがありますとにかくこのような配列操作を使用するとうまくいくはずです。しかし、それはオーバーヘッドを追加します。重み付けには意味がありません(私の経験則では、データに意味のある列名がある場合はデータフレームを使用してください)。

関連する問題