1. 程式人生 > >三種不同的方式,計算歐氏距離,速度比較

三種不同的方式,計算歐氏距離,速度比較

def int list axis return arr () num ces

import time
import numpy as np
#計算單行的歐氏距離
def cal_1(vec):
dist = np.linalg.norm(vec)
sim = (1.0 / (1.0 + dist))
return sim
#計算多行的歐氏距離
def cal_2(vec):
dist = np.linalg.norm(vec,axis=1)
sim = (1.0 / (1.0 + dist))
return sim

#生成向量vec1
t = np.zeros(20000,dtype=float)
vec1 = np.append(np.random.rand(100),t) #構建一個20100維的稀疏矩陣
vec1 = np.tile(vec1,(10000,1)) #10000行
print(‘built vec sucess!‘,vec1.shape)

#使用for循環計算歐氏距離
time1 = time.time()
arr1 = np.array([])
for i in vec1:
b = cal_1(i)
# print(b)
arr1 = np.append(arr1,b)
time2 = time.time()
print(time2-time1)

#使用map計算歐氏距離
time1 = time.time()
arr2 = np.array(list(map(cal_1,vec1)))
time2 = time.time()
print(time2-time1)

#使用cal_2計算歐氏距離
time1 = time.time()
arr3 = cal_2(vec1)
time2 = time.time()
print(time2-time1)

大規模計算歐氏距離,三種方法在不同情況下速度不同。
1、如果特征數很高、樣本多,則使用map快
2、如果特征數低,多,則使用np.linalg.norm(vec,axis=1)
3、如果特征很少,樣本很少,則使用for

三種不同的方式,計算歐氏距離,速度比較