2011-05-13 18 views
1

n次元マトリックスの座標をその形状とフラットインデックスからどのように取得できますか?フラットインデックスからマトリックスの座標を取得

例えばI 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]?

可能であれば、どのような形状の行列でも動作する一般的で簡単な方法を知りたいと思います。

ご協力いただきありがとうございます。あなたは行列A [A] [B] [C] [D](a、b、c、dは次元である)とインデックスがあるとしましょう

+0

'、4'は、2×2 + 0×3 = 4であるが、それは[2,0]と呼ばれるべきではない[0,2]。 9/20 = 0、(9-0 * 20)/ 2 = 4、(9-0 * 0)である9は[0,4,1]になります(ブラケットを数えません) 10-4 * 2)= 1]となる。より明示的な答えが必要な場合は、i、j、kのようなインデックスを使用する必要があります。 – Beta

+0

あなたの助けに感謝、ベータ。 –

答えて

1

あなたはこの単純なアルゴリズムを使用することができますX.

インデックスXの最初の座標を取得するには、単純にXをb * c * dで割ります。

は最初の座標を見つけるために、最後の寸法によって第一分割XインデックスはX = 7

0 1 2 3 4 
5 6 7 8 9 

[5]及び[2]、それはサイズを有する、この次の行列とします。 X/5 = 1である。そこから、あなたは前方に進み、XにX%= 5の値を与えます。したがって、X = 7%5 = 2になります。今度は、同じアルゴリズムを使用して残りの次元の座標を検索する必要があります。最後の次元に達すると、座標は残りのX(この場合は2)になります。したがって、X = 7の座標は[1] [2]です。

また、一般的なケースでは、a、b、c、dの次元がある場合です。
y番目のディメンションに(yd)を書き留めます。

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

ありがとう、@クリスティ! –

関連する問題