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
  • 相关阅读:
    spring boot 配置示例
    MyBatis 常用标签用法
    http请求头部常用参数
    CentOS7使用firewalld打开关闭防火墙与端口
    java8 base64
    MD5工具类
    各种远程登录工具
    MySql 常用命令
    spring-boot-mybaits 开启事务
    springboot 项目打包到 linux下无法 运行
  • 原文地址:https://www.cnblogs.com/yjybupt/p/10281824.html
Copyright © 2011-2022 走看看