2017-11-29 8 views
1

Ich versuche, Spalten von Matrizen (in 2D) aus einer Reihe von gegebenen Indizes (in 3D) zu extrahieren, ohne die 2D-Matrix in 3D zu konvertieren, um effizient Speicher (ich bin Umgang mit sehr großen Daten), kann ich das erreichen? Ich werde die 2D-Matrix für jedes Stück der 3D-Matrix wiederverwenden, aber ich weiß einfach nicht, wie ich es machen soll. Beispielcode:Extrahieren Spalte Spalte von Matrizen aus einem 3D-Index

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 

Erwartete Ausgabe von Extracted würde 9x100x30 sein. Irgendwelche Ideen Jungs? Danke im Voraus!

Antwort

2

kann eine Lösung Inline-Funktion verwenden und 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); 

Eine andere Lösung ist die 3D-Matrix B auf einen Vektor umwandeln. dann Ihre Methode Extracted abzurufen:

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

Mit dem ersten Verfahren wird die Ausgabe von 'Extracted' wäre' 1x100x30', es verpasst, die anderen acht Reihen though. –

+0

@GregorIsack Wenn 'B's Elemente lineare Index sind, so passiert es nicht. – OmG

+0

Verstanden, danke! –

Verwandte Themen