为了账号安全,请及时绑定邮箱和手机立即绑定

如何在python中找到向量和矩阵(大小不同的矩阵)之间的相似距离?

如何在python中找到向量和矩阵(大小不同的矩阵)之间的相似距离?

qq_笑_17 2023-04-11 15:58:15
我有一个用户“首选项”表的数据集,该表的一个实例如下所示:print(user_normalized[1].reshape(1, -1).shape)print(user_normalized[1].reshape(1, -1))___________________________________________________________________(1, 20)[[0.         0.00239107 0.00131709 0.         0.00355872 0.00212352  0.00300639 0.00044287 0.001469   0.00358637 0.01520913 0.  0.         0.         0.00174978 0.00237691 0.0026616  0.00241604  0.         0.        ]]这给了我第一个用户的偏好向量。我有电影内容表的数据集:print(movie_content.shape)print(movie_content)___________________________________________________________________(27278, 20)[[1 0 0 ... 0 0 0] [1 0 0 ... 0 0 0] [0 0 0 ... 0 0 0] ... [0 0 0 ... 0 0 0] [0 0 1 ... 0 0 0] [1 0 0 ... 0 0 0]]我正在尝试获取用户偏好向量和电影内容表的点积,以便找到最优惠的电影(余弦相似度):distances = np.dot(user_normalized[1], movie_content)但这给了我以下错误:ValueError: shapes (1,20) and (27278,20) not aligned: 20 (dim 1) != 27278 (dim 0)为了找到最优惠的电影,找到距离度量的正确方法是正确的吗?如果是代码有什么问题?
查看完整描述

2 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

使用user_normalizeduser_normalized.T) 的转置将适用于更多维。

所以,简短的回答是:使用

distances = np.dot(movie_content, user_normalized.T)

更复杂的答案是,点积仅针对两个矩阵定义X,并且Y如果第二个维度与X第一个维度匹配Y,即X具有形状(M, N)Y形状(N, D)。点积的结果是一个维度为 的新矩阵(M, D)

在您的情况下,您有一个(27278, 20)矩阵和一个(1, 20)矩阵。转置将(1, 20)矩阵变成(20, 1)矩阵,从而满足点积的条件。最终结果是一个(27278, 1)矩阵,其中每个单元格包含第 N 部电影和第 D 个用户的乘积。


查看完整回答
反对 回复 2023-04-11
?
DIEA

TA贡献1820条经验 获得超2个赞

您需要将矢量重塑为(-1, 1). 如果要取两个形状数组的点积(m, k)(t, n)k必须等于t. 由于在 numpy 中没有向量的概念,你基本上有一个形状数组(27278, 20)(movie_content) 和另一个形状数组(1, 20)(user_normalized)。为了能够获取点积,您必须重塑 user_normalized 数组的形状,(20, 1)使 movie_content 和 user_normalized 数组“对齐”(numpy 喜欢这样称呼它)作为dot产品。

因此,您的代码看起来像

import numpy as np

distances = np.dot(movie_content, user_normalized[1].reshape(-1, 1))
查看完整回答
反对 回复 2023-04-11
  • 2 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信