Python 找出两个numpy矩阵有多相似

Python 找出两个numpy矩阵有多相似,python,numpy,image-processing,scipy,scikit-image,Python,Numpy,Image Processing,Scipy,Scikit Image,我想知道两个numpy矩阵有多大的不同。Matrix1和Matrix2可能非常相似,就像80%相同的值,但只是移动了。。。我在右上角附加了两个相同数组的图像,它们的值序列略有不同 from skimage.util import compare_images #matrix1 & matrix2 are numpy arrays compare_images(matrix1, matrix2, method='diff') 给我一个第一个比较,但是两个numpy矩阵呢,例如,其中一个

我想知道两个numpy矩阵有多大的不同。Matrix1和Matrix2可能非常相似,就像80%相同的值,但只是移动了。。。我在右上角附加了两个相同数组的图像,它们的值序列略有不同

from skimage.util import compare_images
#matrix1 & matrix2 are numpy arrays
compare_images(matrix1, matrix2, method='diff')

给我一个第一个比较,但是两个numpy矩阵呢,例如,其中一个左移了几列

from scipy.signal import correlate2d
corr = correlate2d(matrix1, matrix2)
plt.figure(figsize=(10,10))
plt.imshow(corr)
plt.grid(False)
plt.show()
打印出相关性,这似乎是一个不错的方法,但我不明白结果是如何显示的,因为差异在图像的右上角

否则:

picture1_norm = picture1/np.sqrt(np.sum(picture1**2))
picture2_norm = picture2/np.sqrt(np.sum(picture2**2))
print(np.sum(picture2_norm*picture1_norm))
返回相似性范围为0-1的值;例如0.9942


什么是好方法?

两个矩阵之间的相关性是衡量两者相似程度的合理标准。如果两者都包含相同的值,(标准化的)相关性将为1,您的(最大?)值0.9942已经非常接近该值。
关于翻译(in-)结果的差异仔细查看
scipy.signal.correlate2d的
mode
参数,该参数定义了如何处理沿矩阵两个轴的不同大小,以及在计算相关性时一个矩阵相对于另一个矩阵滑动多远。

我认为这个问题超出了SO的范围,它取决于您的应用程序以及您希望使用该度量值执行的操作。如果有人想运行代码并在回复帖子中显示结果,您还可以提供原始图像。