C#轻松存储快速访问的大矩阵

时间:2018-05-08 15:39:44

标签: c# matrix optimization

令M为2048x2048矩阵os位。

如果我想将所有这些位存储在矩阵中,那么执行

效率会不高

int[,] M = new int[2048, 2048]

因为它需要比特所需空间的32倍(每个int 2048 ^ 2 * 32bits)。

我可以做int[,] M = new int[64, 64]并且每个int会给我32位(因此 32×64 = 2048 ),所以我会有一个很好的空间消耗,但它有点像例如,某些任意行的第1033位是难看的,因为我必须获得( 1033/32 )int的( 1033%32 )位

我的问题是:有没有更好的(或更具体的方法)让这个位矩阵具有最佳的空间消耗和对任何M [i] [j]∈{0,1}的持续访问?

1 个答案:

答案 0 :(得分:2)

使用BitArray类的数组:

var bitMatrix = new BitArray[2048];
for (int i = 0; i < bitMatrix.Length; i++)      
    bitMatrix[i] = new BitArray(2048);  

bitMatrix[5][12] = true;

请注意,您可以通过bool值访问这些位。