我正在尝试为我的学生作业编写一个算法,它运行良好。但是,计算需要很长时间,尤其是对于大数组。 这部分代码会减慢所有程序。加快矩阵计算(在子阵列上循环)[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