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