2013-05-05 34 views
0

我有一個1200x130 0-1矩陣,其中一些行是相同的(4行來自一行,8來自另一行等)。我試圖找到一種有效的方法來將相同的ID分配給相同的行。將ID分配到二元矩陣中的相同行

這是我在Excel中試過的: 對於每一行,我將第k列條目乘以2^k並且在所有列上求和。理論上,對於不同的行,這應該給我一個唯一的ID,但數字變得非常大,Excel會比較這些數字。 (我想這是因爲它像3.234023490249 x 10^246一樣將它們存儲到某個數字並忽略剩餘的數字。)

所以我決定使用VBA,但我能想到的唯一方法是配對比較所有行和列。我相信應該有更有效的方法來處理這個問題。任何建議?

(我不是在尋找一個Excel或VBA具體的解決辦法。任何建議會有所幫助。)提前

感謝。

+0

我不確定你的意思是*「將第k列條目乘以2^k並將所有列相加」*。你能爲我詳細介紹一下嗎? – glh 2013-05-05 11:37:06

+0

由於每一行號碼都是唯一的,並且在我需要唯一號碼的情況下,我會在其中添加'row_nbr/1000'。 – glh 2013-05-05 11:40:17

+0

對於這樣一排:1 0 0 1 0 1,我這樣做:1 * 2^1 + 0 * 2^2 + 0 * 2^3 + 1 * 2^4 + 0 * 2^5 + 1 * 2^6 ...當我有少量的列時,它可以很好地工作,但對於這種情況它不會。 – stgath 2013-05-05 11:46:34

回答

0

您正在將二進制轉換爲十進制。這確實是一個巨大的數字。 A long程序語言中的整數是64位數字。所以你的130位也會溢出。

您可以使用組合ID,將每個ID限制爲最大長整型值。 對於130位,每行最少3個長整數。

每行有3個ID。假設第一個ID取前40位。 第二ID從41到80。 第三ID取從81數位,130

比較談將要求所有3點的ID是相同的,返回一個equal ID取數字。


你也可以使用字符串。

使用十六進制(每4個二進制數字一個字符),您將有130/4 = 33個字符。

也許如果你嘗試一些32位的基數,它會給130/5 = 26個字符。 每個5位對應於0, 1, 2, ..., 8, 9, A, B, ..., U, V中的一個字符。

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