2024-09-20 07:41:40 发布
网友
我试图使用Python和Numpy/Scipy来实现一个图像处理算法。profiler告诉我在下面的函数中花费了很多时间(经常调用),它告诉我两个图像之间的平方差之和
def ssd(A,B): s = 0 for i in range(3): s += sum(pow(A[:,:,i] - B[:,:,i],2)) return s
我怎样才能加快速度?谢谢。
我不明白你为什么要服用i in range(3)。这应该是整个阵列,还是只是一部分?
i in range(3)
总的来说,您可以用在numpy中定义的操作替换大部分:
def ssd(A,B): squares = (A[:,:,:3] - B[:,:,:3]) ** 2 return numpy.sum(squares)
这样,您可以执行一个操作而不是三个操作,并且使用numpy.sum可以比内置的sum更好地优化加法。
numpy.sum
sum
只是
s = numpy.sum((A[:,:,0:3]-B[:,:,0:3])**2)
(如果形状总是(,,3),我希望它可能只是sum((A-B)**2))
sum((A-B)**2)
也可以使用sum方法:((A-B)**2).sum()
((A-B)**2).sum()
对吧?
我不知道power 2的pow()函数是否会很快。尝试:
def ssd(A,B): s = 0 for i in range(3): s += sum((A[:,:,i] - B[:,:,i])*A[:,:,i] - B[:,:,i]) return s
我不明白你为什么要服用
i in range(3)
。这应该是整个阵列,还是只是一部分?总的来说,您可以用在numpy中定义的操作替换大部分:
这样,您可以执行一个操作而不是三个操作,并且使用
numpy.sum
可以比内置的sum
更好地优化加法。只是
(如果形状总是(,,3),我希望它可能只是
sum((A-B)**2)
)也可以使用sum方法:
((A-B)**2).sum()
对吧?
我不知道power 2的pow()函数是否会很快。尝试:
相关问题 更多 >
编程相关推荐