numpy/scipy中的平方差异(SSD)之和

Int*_*man 8 python numpy image-processing scipy

我正在尝试使用Python和Numpy/Scipy来实现图像处理算法.分析器告诉我在下面的函数(经常调用)中花费了大量时间,这告诉我两个图像之间的平方差异的总和

def ssd(A,B):
    s = 0
    for i in range(3):
        s += sum(pow(A[:,:,i] - B[:,:,i],2))
    return s
Run Code Online (Sandbox Code Playgroud)

我怎样才能加快速度呢?谢谢.

And*_*ffe 36

只是

s = numpy.sum((A[:,:,0:3]-B[:,:,0:3])**2)
Run Code Online (Sandbox Code Playgroud)

(这是我想到的是可能只是sum((A-B)**2)如果形状始终是(,,3))

您还可以使用sum方法: ((A-B)**2).sum()

对?

  • 砰.我的日子很慢.把我的运行时间减半. (2认同)

She*_*ohn 5

只是提一下,还可以使用np.dot

def ssd(A,B):
  dif = A.ravel() - B.ravel()
  return np.dot( dif, dif )
Run Code Online (Sandbox Code Playgroud)

这可能比使用np.sumand 的替代方案更快,也可能更准确**2,但如果您想沿指定轴计算 ssd 则不起作用。在这种情况下,可能有一个神奇的下标公式使用np.einsum.