2011-05-13 44 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