我正在努力寫漢明距離。
作爲輸入我確實有兩個矩陣M1和M2,一個是40x20,第二個50x20;它們包含真/假。我需要計算每行之間的距離,因此M2 [0],M1 [0]與M2 [1] ... M1 [39]與M2 [49]之間的距離爲M1 [0]。產生40x50結果矩陣。我的第一次嘗試當然循環如下:漢明距離蟒蛇改進
for x_i in range(X.shape[0]):
for x_train_j in range(X_train.shape[0]):
distance_results[x_i, x_train_j] = sum(np.logical_xor(x_array[x_i, :], x_train_array[x_train_j, :]))
這是正確的,但是,它對我的數據來說太慢了。我對乘以M1.dot(M2.T)
,這給矩陣的正確的形狀的一些想法,並在一個步驟並總結,但乘以總結XOR當需要這樣:
1 * 1 = 1
(需要0 - 壞)
1 * 0 = 0
(需要1 - 壞)
0 * 1 = 0
(需要1-差)
0 * 0 = 0
(需要0--還可以)
你有什麼想法我怎麼能得到想要的結果?我想我錯過了一些數學正確和快速的做法。 在此先感謝。
你可以嘗試使用numba加快執行。 Numba提供「及時」編譯來加速執行。更多信息在這裏:http://numba.pydata.org/ 給出的例子(sum2d)可以很容易地適應您的需要。 – ma3oun
我的講師給出了一些關於使用標量乘法的建議,但是我仍然無法完成它 –