我有一个1200x130 0-1矩阵,有些行是相同的(一行4个,另一行8个等)。我试图找到一种有效的方法来将相同的ID分配给相同的行。
这是我在Excel中尝试过的内容: 对于每一行,我将第k列列表乘以2 ^ k并对所有列求和。从理论上讲,对于每个不同的行,这应该给我一个唯一的ID,但数字变得非常大,Excel会混淆这些数字的比较。 (我想这是因为它将它们存储为3.234023490249 x 10 ^ 246直到某个数字并忽略其余数字。)
所以我决定使用VBA,但我能想到的唯一方法是对所有行和列进行成对比较。我相信应该有更有效的方法来处理这个问题。有什么建议吗?
(我不是在寻找Excel或VBA特定的解决方案。任何建议都会有所帮助。)
提前致谢。
答案 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个字符串。