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


    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
  • 相关阅读:
    SQL 强化练习 (七)
    SQL 强化练习 (六)
    SQL 强化练习 (五)
    SQL 强化练习 (四)
    典型相关分析 CCA
    SQL 强化练习(三)
    双向 和 多重 RNN
    SQL 强化练习 (二)
    SQL 强化练习 (一)
    SQL 查询强化
  • 原文地址:https://www.cnblogs.com/yjybupt/p/10281824.html
Copyright © 2020-2023  润新知