我有一个8x8矩阵,如下所示:
char matrix[8][8];
另外,我有一个由64个元素组成的数组,如下所示:
char array[64];
然后我把矩阵画成一张表格,用数字填充单元格,每个数字从左到右,从上到下递增.
比方说,如果我在矩阵中有索引3(列)和4(行),我知道它对应于数组中位置35的元素,就像我画的表中可以看到的那样.我相信有某种公式可以将矩阵的2个索引转换为数组的单个索引,但是我不知道它是什么.
有什么主意吗?
我有一个8x8矩阵,如下所示:
char matrix[8][8];
另外,我有一个由64个元素组成的数组,如下所示:
char array[64];
然后我把矩阵画成一张表格,用数字填充单元格,每个数字从左到右,从上到下递增.
比方说,如果我在矩阵中有索引3(列)和4(行),我知道它对应于数组中位置35的元素,就像我画的表中可以看到的那样.我相信有某种公式可以将矩阵的2个索引转换为数组的单个索引,但是我不知道它是什么.
有什么主意吗?
大多数语言存储多维数组的方式是执行如下转换:
如果matrix
的大小是n(行)乘m(列),我们使用"row-major ordering"(我们首先沿着行数),那么:
matrix[ i ][ j ] = array[ i*m + j ]
美元.
这里i从0到(n-1),j从0到(m-1).
所以它就像一个以‘m’为基数的数字系统.请注意,最后一个维度的大小(这里是行数)并不重要.
对于概念性理解,请考虑一个行号为‘i’、列号为‘j’的(3x5)矩阵.如果你从i,j = (0,0) --> 0
开始编号.对于'row-major'订单(如下所示),布局如下:
|-------- 5 ---------|
Row ______________________ _ _
0 |0 1 2 3 4 | |
1 |5 6 7 8 9 | 3
2 |10 11 12 13 14| _|_
|______________________|
Column 0 1 2 3 4
当您沿着行移动(即增加列数)时,您只需开始计数,因此数组索引为0,1,2...
.当你到达第二行时,你已经有5
个条目,所以你从索引1*5 + 0,1,2...
开始.在第三行,您已经有2*5
个条目,因此索引是2*5 + 0,1,2...
.
对于更高的维度,这个 idea 是通用的,即对于3D matrix
L×N×M:
matrix[ i ][ j ][ k ] = array[ i*(N*M) + j*M + k ]
个
诸若此类.
要获得一个非常好的解释,请参见:http://www.cplusplus.com/doc/tutorial/arrays/;或有关更多技术方面的信息:http://en.wikipedia.org/wiki/Row-major_order