[英]More efficient dot-product with 'numpy.ndarray'
我的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)
这是否可以更有效地完成(也许最后没有list
到numpy.ndarray
转换)?
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)
让我们假设一些数据
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 的最后一个轴上的和积。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.