JavaScript中数组与矩阵互转公式的原理疑问求解
二维矩阵与一维数组的转换公式解析
先明确JavaScript环境下的转换公式:
// r行c列矩阵转一维数组 matrix[x][y] → arr[x * c + y] // 一维数组转r行c列矩阵 arr[x] → matrix[Math.floor(x / c)][x % c]
为什么转换操作围绕列数(c)展开?
矩阵的每一行固定包含c个元素,把二维矩阵按行平铺成一维数组时,每行的元素会占据连续的c个位置。列数c就是每行的"元素容量",是打通二维坐标和一维索引的核心参照值。
矩阵转数组:x * c + y的推导逻辑
x是矩阵的行索引,前面已经有x行完整的元素,每行c个,所以前x行总共占据了x * c个一维数组的位置。y是当前行的列索引,代表它在当前行里是第y个元素(从0开始计数),把前面的总位置数加上y,就得到了这个元素在一维数组里的准确索引。
举个实际例子:3行4列的矩阵,matrix[1][2](第2行第3个元素),前1行有4个元素,1*4=4,加上列索引2,得到数组索引6,对应一维数组的第7个位置(索引从0开始)。
数组转矩阵:整除与取余运算的作用
把一维数组索引x拆成矩阵的二维坐标,本质是拆分出它所在的行和列:
- 整除
Math.floor(x / c):用总索引除以每行的元素数c,取整数商就是行索引。比如索引6除以4得1.5,取整后是1,对应矩阵的第2行。 - 取余
x % c:总索引除以c的余数,就是当前行内的列索引。比如6%4=2,对应矩阵的第3列,正好和上面的例子形成反向验证。
内容的提问来源于stack exchange,提问作者Maxi Meri
相关产品推荐
相关产品推荐

