我正在嘗試爲我的學生作業編寫一個算法,它運行良好。但是,計算需要很長時間,尤其是對於大數組。 這部分代碼會減慢所有程序。加快矩陣計算(在子陣列上循環)[numpy]
Shapes: X.shape = mask.shape = logBN.shape = (500,500,1000),
F.shape = (20,20),
A.shape = (481,481),
s2 -- scalar.
我應該如何改變這種代碼,使其更快?
h = F.shape[0]
w = F.shape[1]
q = np.zeros((A.shape[0], A.shape[1], X.shape[2]))
for i in range(A.shape[0]):
for j in range(A.shape[1]):
mask[:,:,:] = 0
mask[i:i + h,j:j + w,:] = 1
q[i,j,:] = ((logBN*(1 - mask)).sum(axis=(0,1)) +
(np.log(norm._pdf((X[i:i + h,j:j + w,:]-F[:,:,np.newaxis])/s2)/s2)).sum(axis=(0,1))
這是不完整的 - 將所有變量(F,A,X)放在一起,以便人們可以使用某些東西。如果在數組上迭代,通常最好轉換爲python列表,因爲它非常慢 - 使用向量操作最快。 – kabanus
@kabanus我不能在程序工作期間生成它們。 – Acapello
我建議打印一次,並在開始時粘貼結果。 – kabanus