找出两个Numpy矩阵的相似度

问题描述

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

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

compare_images

给我第一个比较,但是两个numpy矩阵怎么样?例如,其中一个被左移几列?

from scipy.signal import correlate2d
corr = correlate2d(matrix1,matrix2)
plt.figure(figsize=(10,10))
plt.imshow(corr)
plt.grid(False)
plt.show()

打印出相关性,这似乎是一个不错的方法,但是由于图像的右上角有差异,所以我不明白结果的显示方式。

correlate2d

否则:

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已经非常接近该值。 关于结果的平移(不变),请仔细查看mode的{​​{1}}参数,该参数定义了如何处理沿矩阵两个轴的不同大小以及将一个矩阵滑到矩阵上的距离。其他在计算相关性时。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...