栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

余弦距离计算

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

余弦距离计算

python

import numpy as np
import math
def cosine_distance(a,b):
    if a.shape != b.shape:
        raise RuntimeError("array {} shape not match {}".format(a.shape, b.shape))
    if a.ndim==1:
        a_norm = np.linalg.norm(a)
        b_norm = np.linalg.norm(b)
    elif a.ndim==2:
        a_norm = np.linalg.norm(a, axis=1, keepdims=True)
        b_norm = np.linalg.norm(b, axis=1, keepdims=True)
    else:
        raise RuntimeError("array dimensions {} not right".format(a.ndim))
    similiarity = np.dot(a, b.T)/(a_norm * b_norm.T)   #计算相似度 [-1,1]
    dist =similiarity   #计算余弦距离:[0,2]
    return dist

def getMold(vec,len): 
    sum = 0.0;
    for i in range(len):
        sum += vec[i] * vec[i]
    return math.sqrt(sum)


def getSimilarity(lhs, rhs,len):    
    tmp = 0.0;
    for i in range(len):
        tmp += lhs[i] * rhs[i];
    return tmp / (getMold(lhs,len)*getMold(rhs,len));

a=np.random.rand(100)
b=np.random.rand(100)
print(a)
print(b)
print(getSimilarity(a,b,100),cosine_distance(a,b))


c/c++

#include
#include 
float getMold(float* vec,int len){   //求向量的模长
    float sum = 0.0;
    for (int i = 0; i    
    float tmp = 0.0;  //内积
    for (int i = 0; i
    int len=128;
	float a[len],b[len];
	for (int i = 0; i < len; ++i)
	{
		a[i]=-100.5+0.2*i;
		b[i]=1.5+0.2*i;
	}
    for (int i = 0; i < len; ++i)printf("%0.3f ",a[i]);printf("n");
    for (int i = 0; i < len; ++i)printf("%0.3f ",b[i]);printf("n");
	float c=getSimilarity(a,b,len);

	printf("%f    n",c );

	return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1026580.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号