2013-04-23 34 views
0

雖然我正在模擬我的代碼中的執行時間,但我發現以下三行佔用了幾乎99%的運行時間,所以我的目標是優化這些三行代碼。什麼是使python的矩陣運算更快的最佳方式

有關以下代碼的細節是: R,P,Q均爲稀疏矩陣,我使用scipy.sparse.lil_matrix,數據類型是np.float64, 和α,β都只是漂浮恆定。

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]) 

我怎麼能讓他們跑得快呢?

+5

嘗試[numexpr](http://code.google.com/p/numexpr/) – JBernardo 2013-04-23 02:57:33

+0

@JBernardo:很酷!比['pyopencl']更容易(http://documen.tician.de/pyopencl/) – Kabie 2013-04-23 03:04:15

+1

@JBernardo提交作爲答案? – jamylak 2013-04-23 03:35:11

回答

0

事實證明,numpy的具有優化矩陣式操作,所以retwrite代碼爲:

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時間比原來的代碼更快。但我仍然不滿意它。

相關問題