亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在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_normalized(?user_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 關注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號