2011-05-13 60 views
1

我们如何从它的形状和其扁平指数得到一个n维矩阵的坐标?从它的平坦索引中获取矩阵的坐标

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

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

...我想找到该指数以粗体从坐标[价值0,2],我该怎么办?

或者,如果我有3个维度的这个(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]?

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

非常感谢您的帮助。

+0

的'4'是在2 * 2 + 0 * 3 = 4,但应称为[2,0],而不是[0,2]。 [9/20 = 0,(9-0 * 20)/ 2 = 4,(9-0 * 10-4 * 2)= 1]。如果你想要一个更明确的答案,你将不得不使用像i,j,k这样的指数。 – Beta 2011-05-13 19:15:30

+0

感谢您的帮助,Beta版。 – 2011-05-13 20:10:36

回答

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],这实际上是answear。

再次,对于一般情况下,你有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

+1

非常感谢@Cristy! – 2011-05-13 20:09:54