从其展平索引中获取矩阵的坐标

时间:2011-05-13 19:02:35

标签: math matrix

我们如何从形状和扁平指数中获得n维矩阵的坐标?

我的意思是,如果我有以下(2,3)2维矩阵:

[ [ 0, 1 ], 
  [ 2, 3 ], 
  [ *4*, 5 ] ]

...我想从坐标[0,2]中找到粗体索引的值,我该怎么办?

或者如果我有这个(2,2,5)三维矩阵:

[ [ [ nil, nil ], 
    [ nil, nil ] ], 
  [ [ nil, nil ], 
    [ nil, nil ] ], 
  [ [ nil, *9*   ], 
    [ nil, nil ] ], 
  [ [ nil, nil ], 
    [ nil, nil ] ], 
  [ [ nil, nil ], 
    [ nil, nil ] ] ]

...而且我知道我想要的坐标的展平索引值为9,如何找到相对坐标为:[1,0,2]?

如果可能的话,我想知道一种通用且简单的方法,它可以处理任何形状的矩阵。

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

您可以使用这个简单的算法:

假设您有矩阵A [a] [b] [c] [d](其中a,b,c,d是维度)和索引X.

要获得索引X的第一个坐标,只需将X除以b * c * d。

让它成为下一个矩阵,其大小为[2] [5],索引X = 7

 0 1 2 3 4
 5 6 7 8 9

首先将X除以最后一个维度以找到第一个坐标。 X / 5 = 1。然后,从那里向前移动并给X值X%= 5。所以你将X = 7%5 = 2。现在,您必须使用相同的算法搜索其余尺寸的坐标。如果到达最后一个维度,坐标将是剩余的X,在这种情况下为2.因此,X = 7的坐标为[1] [2],实际上是安装。

同样,对于一般情况,你有a,b,c,d尺寸 我会注意到(yd)y维度。

X=index
(1d)=X/b*c*d
X gets value X % b*c*d

(2d)=X/c*d
X gets value X % c*d

(3d)=X/d
X gets value X % d

(4d)=X

如果你有尺寸[2] [2] [5],你会得到:

X=9;

(1d) = 9/2*5 = 0
X = 9%10 = 9

(2d) = 9/5 = 1
X = 9%5 = 4

(3d) = 4

Result: [0][1][4] is the 9th element.

要从[0] [1] [4]到索引9,你可以通过相乘来执行反向算法:

X=(1d)*b*c + (2d)*c + 3d = 0 + 1*5 +4 =9