将ID分配给二进制矩阵中的相同行

时间:2013-05-05 10:37:26

标签: excel excel-vba binary-matrix vba

我有一个1200x130 0-1矩阵,有些行是相同的(一行4个,另一行8个等)。我试图找到一种有效的方法来将相同的ID分配给相同的行。

这是我在Excel中尝试过的内容: 对于每一行,我将第k列列表乘以2 ^ k并对所有列求和。从理论上讲,对于每个不同的行,这应该给我一个唯一的ID,但数字变得非常大,Excel会混淆这些数字的比较。 (我想这是因为它将它们存储为3.234023490249 x 10 ^ 246直到某个数字并忽略其余数字。)

所以我决定使用VBA,但我能想到的唯一方法是对所有行和列进行成对比较。我相信应该有更有效的方法来处理这个问题。有什么建议吗?

(我不是在寻找Excel或VBA特定的解决方案。任何建议都会有所帮助。)

提前致谢。

1 个答案:

答案 0 :(得分:0)

您正在将二进制转换为十进制。这确实是一个巨大的数字。 程序语言中的long整数是64位数。所以你的130位也会溢出它。

您可以使用组合ID,将每个ID限制为最大长整数值。 对于130位,每行至少有3个长整数。

每行会有3个ID。 比如说,第一个ID取前40位。 第二个ID取数字从41到80。 第三个ID取81到130的数字。

Comparson要求所有3个ID相同才能返回equal ID。


您也可以使用字符串。

使用十六进制(每4个二进制数字一个字符),您将拥有130/4 = 33个字符。

如果您尝试使用32个碱基数,它可能会产生130/5 = 26个字符。 每5位对应一个来自0, 1, 2, ..., 8, 9, A, B, ..., U, V的字符。

或者只是包含所有位的普通130个字符串。