2017-11-29 5 views
1

私は、2D行列を3Dに変換しないで、メモリを効率的に使用することなく、与えられたインデックスの集合から(2Dで)行列の列を抽出しようとしています非常に巨大なデータを処理する)、私はこれを達成することができますか?私は3Dマトリックスの各スライスの2Dマトリックスを再利用しますが、私はそれをどうやって行うのか分かりません。コード例:Extractedの出力は9x100x30だろう期待3Dインデックスからの行列の抽出列

A=rand(9,100); %The matrix that will be reused 
B=randi([1 100],[1 100 30]); %the indices 
Extracted=A(:,B); %this part I can't seem to solve it yet 

。どんなアイデアみたいな?前もって感謝します!

答えて

2

溶液は、インライン関数とarrayfunを使用することができる。

A=rand(9,100); %The matrix that will be reused 
B=randi([1 100],[1 100 30]); %the indices 
func = @(x) A(x); 
Extracted = arrayfun(func, B); 

別の解決策は、ベクトルに3DマトリックスB変換です。 次にExtractedを取得するためにあなたの方法を使用して:

A=rand(9,100); %The matrix that will be reused 
B=randi([1 100],[1 100 30]); %the indices 
idx = reshape(B,1,numel(B)); 
Extracted = A(idx); 
+0

を第一の方法を使用して、Extracted' 'の出力は' 1x100x30'、それはしかし、他の8行を逃したことになります。 –

+0

@GregorIsack 'B'の要素が線形インデックスなので、それは起こりません。 – OmG

+0

ありがとう! –

関連する問題