python - 找出两个 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 已经非常接近该值。关于结果的平移(不变)方差,请仔细查看其mode
参数,该参数scipy.signal.correlate2d
定义了如何沿矩阵的两个轴处理不同的大小,以及在计算相关性时将一个矩阵滑过另一个矩阵的距离。
推荐阅读
- mysql - 使用返回值作为 CSV 的 SELECT IN 查询
- iphone - 如何在 iPhone 上调试运行在 Opera 上的 Web 应用程序?
- string - Python3 - 什么是正确的语法?a = b(字符串,整数)
- kotlin - 用于可变列表的 Kotlin dsl 添加
- reactjs - React.useMemo 第二个参数数组可以包含一个对象吗?
- sql - 添加存储为 varchar 的十进制值的问题
- pyspark - 如何使用 pyspark for 循环打印迭代值
- android - 如何解决“所有 com.android.support 库必须使用完全相同的版本规范”问题?
- machine-learning - 数据量少怎么会导致过拟合?
- react-native - 本机基础中的抽屉组件显示错误“警告:功能组件不能...”