我user_factors和item_factors是numpy.ndarray型別。我想有效地計算一行user_factors和每一行之間的點積item_factors,并將結果存盤在numpy.ndarray. 這就是我的做法:
import numpy as np
...
user_coordinates = user_factors[user_id]
scores = []
for i in range(len(item_factors)):
item_coordinates = item_factors[i]
score = sum(i[0] * i[1] for i in zip(user_coordinates, item_coordinates))
scores.append(score)
np_scores = np.hstack(scores)
這是否可以更有效地完成(也許最后沒有 listtonumpy.ndarray轉換)?
uj5u.com熱心網友回復:
A 的第 i 行和 B 的第 j_ 行之間的點積在 C_{ij} 中給出:
A=np.random.randint(10, size=(3,3))
B=np.random.randint(10, size=(3,3))
C=np.dot(A,B.T)
如果要計算 A 的特定行(例如第 2 行)與 B 的所有行之間的點積,則:
C = np.dot(A[1,:], B.T)
uj5u.com熱心網友回復:
讓我們假設一些資料
np.random.seed(0)
user_coordinates = np.random.randint(0, 10, (10,))
item_factors = np.random.randint(0, 10, (15, 10))
你的結果將是
>>> np_scores
array([220, 156, 133, 178, 205, 269, 164, 184, 98, 159, 103, 182, 194,
157, 188])
您可以使用 numpy 在單行直線中實作相同的效果:
>>> item_factors.dot(user_coordinates)
array([220, 156, 133, 178, 205, 269, 164, 184, 98, 159, 103, 182, 194,
157, 188])
的檔案numpy.dot說:
- 如果 a 是 ND 陣列而 b 是一維陣列,則它是 a 和 b 的最后一個軸上的和積。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/346544.html
