如何在大矩阵中找到小矩阵的最佳匹配? 例如:
small=[[1,2,3],
[4,5,6],
[7,8,9]]
big=[[2,4,2,3,5],
[6,0,1,9,0],
[2,8,2,1,0],
[7,7,4,2,1]]
匹配被定义为矩阵中数的差异,因此位置匹配(1,1)就好像小矩阵中的数字5将位于大矩阵的0上(因此小矩阵的中心数在大矩阵的坐标(1,1)上。在
位置(1,1)中的匹配值为: m(1,1)=2−1 |+| 4−2 |+| 2−3 |+| 6−4 |+| 0−5 |+| 1−6 |+| 2−7 |+|+| 2−9 |=28
目标是找到这些矩阵中可能存在的最小差。在
小矩阵总是有奇数行和列,所以很容易找到它的中心。在
您可以迭代可行的行和列,并用
small
压缩big
的片段,以计算差异之和,并使用min
查找差异中的最小值:或者在一行中:
^{pr2}$返回:
(24, (1, 0))
手工完成:
输出:
^{pr2}$如果您只对大的一个中的坐标感兴趣,请将
(rowoffset,coloffset,sum)
的元组存储到列表中,而不要将列表框放入列表中。您可以通过以下方式将min()
与键一起使用:输出:
如果有“draws”,则只返回行数最少的列偏移量。在
另一个可能的解决方案是,返回最小差值和
big
矩阵中的坐标:输出:
^{pr2}$相关问题 更多 >
编程相关推荐