码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-01-17 15:08:13      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:一个   不同的   pre   float   uil   不同   nal   turn   for循环   

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

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

标签:一个   不同的   pre   float   uil   不同   nal   turn   for循环   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!