python计算两个矩阵的相似度_两个矩阵的余弦相似性计算

我有一个代码来计算两个矩阵之间的余弦相似性:def cos_cdist_1(matrix, vector):

v = vector.reshape(1, -1)

return sp.distance.cdist(matrix, v, 'cosine').reshape(-1)

def cos_cdist_2(matrix1, matrix2):

return sp.distance.cdist(matrix1, matrix2, 'cosine').reshape(-1)

list1 = [[1,1,1],[1,2,1]]

list2 = [[1,1,1],[1,2,1]]

matrix1 = np.asarray(list1)

matrix2 = np.asarray(list2)

results = []

for vector in matrix2:

distance = cos_cdist_1(matrix1,vector)

distance = np.asarray(distance)

similarity = (1-distance).tolist()

results.append(similarity)

dist_all = cos_cdist_2(matrix1, matrix2)

results2 = []

for item in dist_all:

distance_result = np.asarray(item)

similarity_result = (1-distance_result).tolist()

results2.append(similarity_result)

results是[[1.0000000000000002, 0.9428090415820635],

[0.9428090415820635, 1.0000000000000002]]

然而,results2是[1.0000000000000002, 0.9428090415820635, 0.9428090415820635, 1.0000000000000002]

我理想的结果是results,这意味着结果包含了相似值列表,但是我想保留两个矩阵之间的计算,而不是向量和矩阵,有什么好主意吗?

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
计算两段中文之间的相似性可以使用自然语言处理中的文本相似度算法,其中比较常用的算法包括余弦相似度、Jaccard相似度、编辑距离等。下面以余弦相似度为例,介绍如何用 Python 实现计算两段中文之间的相似性余弦相似度是通过计算两个向量之间的夹角来衡量它们的相似度的一种方法。在文本相似计算中,我们可以将每个文本看做一个向量,将所有文本组成的集合看做一个矩阵,然后计算两个文本向量之间的余弦相似度。具体实现步骤如下: 1. 对两段中文进行分词和去停用词处理,得到两个分词后的文本列表。 2. 将两个文本列表合并成一个词汇表,即去重后的所有词汇。 3. 分别计算两个文本向量,每个文本向量表示在词汇表中每个词汇在该文本中出现的次数。 4. 计算两个文本向量之间的余弦相似度。 下面是使用 Python 实现余弦相似计算的代码: ```python import jieba from sklearn.feature_extraction.text import CountVectorizer from sklearn.metrics.pairwise import cosine_similarity def cosine_similarity_chinese(text1, text2): # 分词和去停用词处理 seg1 = [word for word in jieba.cut(text1) if word.strip() and word not in stopwords] seg2 = [word for word in jieba.cut(text2) if word.strip() and word not in stopwords] # 合并词汇表 words = list(set(seg1 + seg2)) # 计算文本向量 vectorizer = CountVectorizer(vocabulary=words) vec1 = vectorizer.fit_transform(seg1) vec2 = vectorizer.fit_transform(seg2) # 计算余弦相似度 sim = cosine_similarity(vec1, vec2)[0][0] return sim ``` 其中,`jieba` 是一个中文分词库,可以用于将中文文本按照单词进行切分;`sklearn` 是一个机器学习库,提供了 `CountVectorizer` 和 `cosine_similarity` 两个类,分别用于计算文本向量和余弦相似度。 以上是余弦相似度的一个简单实现,实际应用时还需要考虑其他因素,如语料库的大小和质量、分词粒度、停用词表的选取等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值