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


    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
  • 相关阅读:
    Python列表去重的三种方法
    关于Python的 a, b = b, a+b
    Python爬取B站视频信息
    Linux文件管理命令
    (一)MySQL学习笔记
    Linux特殊字符含义
    在父容器div中图片下方有一条空隙问题
    对Json的各种遍历方法
    for循环使用append问题
    IE兼容性
  • 原文地址:https://www.cnblogs.com/yjybupt/p/10281823.html
Copyright © 2020-2023  润新知