哈希函数到矩阵

我有两个矩阵,我需要比较它们,但我不想比较位置,我认为这不是最好的方法。 我想到哈希函数,有谁知道如何计算矩阵的哈希值?

如果你的矩阵是作为数组实现的,我建议使用string.h memcmp()来确定它们是否相等。

如果涉及浮点值并且值来自实际计算,则无法按值检查它们,因为您必须包含epsilons以容纳数字错误。

您可以计算整个浮点数组的哈希值(作为字节序列)。 如果您希望比较函数能够处理系数中的微小差异,您可以比较从每个矩阵计算的平凡标量和向量。 如果必须将每个矩阵与多个矩阵进行比较,这是有意义的。 想到的例子:

 trace of the matrix vector of L0, L1, L2 norms of all columns or rows diagonal of LU factorization tridiagonal reduction (if symmetric) diagonal of eigenvalues (if possible) diagonal of SVD 

首先,哈希不会告诉你两个矩阵是否相等,只能告诉你它们是否相同; 因为可能存在(并且会有,墨菲定律总是潜伏着)碰撞。

您可以通过链接元素上的任何函数来计算哈希…如果您可以将元素转换为整数值(不是截断,而是二进制表示),也许您可​​以对所有元素进行异或(但请记住,这不会’如果某些值相同但具有不同的表示,如-0和+0或NaN,则工作。

所以我的建议是你可以预先计算某种哈希函数(即使所有元素的总和都是有效的)(这很重要,每次你想要进行比较然后比较时,没有必要计算哈希值。哈希)快速丢弃一些不同的矩阵,但如果哈希是相同的,你将不得不比较每个位置。

当你说哈希我想你想校验矩阵并比较校验和以确认相等。 假设您的每个矩阵都存储为一个连续的数据块,您可以计算每个块的起始地址和长度(以字节为单位),然后为两者生成校验和(因为您希望它们有时相等,长度将是相同)。 如果校验和相同且概率非常高,则两个矩阵也相等。 如果正确性至关重要,那么一旦校验和匹配,就可以在两个矩阵上运行比较循环。 这样你就不会调用比较的代价,除非很可能是相等的。

维基百科校验和参考