当我在代码中消除执行时间时,我发现以下三行占用了近99%的运行时间,因此我的目标是优化这三行代码。
以下代码的详细信息如下: R,P,Q都是稀疏矩阵,我使用scipy.sparse.lil_matrix,数据类型是np.float64, 和alpha,beta只是浮动常数。
eij = R[i, j] - np.dot(P[i, :], Q[:, j]) (~9s)
for k in range(K): (~11s)
P[i, k] += alpha * (2 * eij * Q[k, j] - beta * P[i, k])
Q[k, j] += alpha * (2 * eij * P[i, k] - beta * Q[k, j])
我怎样才能让它们跑得更快!!! ???
答案 0 :(得分:0)
事实证明numpy已经优化了矩阵类型的操作,因此将代码重写为:
eij = rating_train[i, j] - np.dot(P[i, :], Q[:, j])
P[i, :] += alpha * (2 * eij * Q[:, j] - beta * P[i, :])
Q[:, j] += alpha * (2 * eij * P[i, :] - beta * Q[:, j])
这比原始代码快1倍。但我仍然不满意..