2017-09-19 106 views
-2

我想在Python中使用兩個公式爲Paper如何將公式轉換爲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. 我怎樣才能以pythonic的方式改變(尤其是F1),因爲那些公式經常被使用(30000次),並且通過它們循環變得非常慢。

+0

你有沒有在熊貓數據框中的體重? –

+0

爲什麼不呢?如果它是一個數據框或一個numpy數組,它會有所作爲嗎? –

+0

如果擔心性能問題,可以使用最小的數據結構來完成這項工作。雖然當你去一個numpy數組時,你不太可能會得到太多額外的東西。此外,它與解釋和維護代碼的容易程度有關。否則,在你的第一個「函數」中,你應該使用適當的numpy元素方式的abs函數而不是絕對的來預先計算矩陣A和B的絕對值(或者你用別名P和Q來表示它們)你不顯示你的進口)。然後減法也可以用numpy代替for循環來完成。 –

回答

1

你會發現,如果你使用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)))) 

應該沒有大量的問題,如果你的權重是在一個數據幀或numpy的陣列 - 一個數據幀是無論如何都支持numpy數組,所以使用像這樣的數組操作應該可以正常工作。然而,它確實會增加開銷,而對於權重來說,使用起來並不合理(我的經驗法則是,如果您的數據具有有意義的列名稱,請使用數據框,否則應使用普通的numpy陣列)