zoukankan      html  css  js  c++  java
  • 三种不同的方式,计算欧氏距离,速度比较

    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
  • 相关阅读:
    c# 抽象类(abstract)
    c# 虚方法(virtual)与 多态(Polymorphism)
    02.JavaScript基础上
    第 12 章 Ajax
    第 11 章 动画效果
    第 10 章 高级事件
    第 9 章 事件对象
    第 8 章 基础事件
    第 7 章 表单选择器
    第6章 DOM节点操作
  • 原文地址:https://www.cnblogs.com/yjybupt/p/10281824.html
Copyright © 2011-2022 走看看