首页 > 其他 > 详细

三种不同的方式,计算欧氏距离,速度比较

时间:2019-01-17 14:37:33      阅读:178      评论:0      收藏:0      [点我收藏+]
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

三种不同的方式,计算欧氏距离,速度比较

原文:https://www.cnblogs.com/yjybupt/p/10281823.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!