0

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

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

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

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

提前致谢。

4

1 回答 1

0

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

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

每行将有 3 个 ID。比如说,第一个 ID 占用前 40 位。第二个 ID 采用 41 到 80 的数字。第三个 ID 采用 81 到 130 的数字。

Comparson 将要求所有 3 个 ID 相同才能返回一个equalID。


您也可以使用字符串。

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

也许如果你尝试一些 32 基数,它会给出130/5 = 26字符。每 5 位对应一个字符0, 1, 2, ..., 8, 9, A, B, ..., U, V

或者只是一个包含所有位的简单 130 个字符的字符串。

于 2013-05-05T18:32:32.193 回答