【发布时间】:2017-03-14 20:47:55
【问题描述】:
我正在尝试为我的学生作业编写一个算法,它运行良好。但是,计算需要很长时间,尤其是对于大数组。 这部分代码正在减慢所有程序。
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 我不能在程序工作期间生成它们。
-
我建议打印一次,然后将开头的结果粘贴到这里。
-
@Divakar 我刚刚添加了信息:logBN -- 矩阵和 s2 -- 标量。
标签: python algorithm performance numpy matrix