2017-09-06 6 views
2

Ich habe X-und Y-Positionen für ein großes Array und ich möchte sie verwenden, um zu definieren, was der Inhalt dieser Position. Ich könnte eine for-Schleife ausführen, um die Positionen zu definieren, aber ich denke, dass es eine schnellere Methode geben würde. Ich habe versucht, die Array-Position definieren Funktion zu verwenden.Matlab-Matrix Indexierung von 2 Arrays (X, Y)

x = [6,2,3] 
y = [1,2,3] 

c = [1,1,1,2,2,3;... 
    1,1,1,2,2,5;... 
    2,2,1,4,2,3;... 
    1,1,4,3,2,3;... 
    1,2,3,4,5,3;... 
    1,2,3,5,4,2]; 

Wenn ich geben Sie die obige Gleichung es unter

c(y,x) 
ans = 
1  2  3 
1  1  1 
2  2  1 

in der Antwort ergibt Was für sind ich suche die 1: 1-Positionen aus den Arrays.

c(y(1),x(1)) 
c(y(2),x(2)) 
c(y(3),x(3)) 

Gibt es eine Möglichkeit, die Arrays auf eine lineare Sequenz zu begrenzen? Meine einzige Vermutung ist jetzt, die Arrays in eine Zellenmatrix umzuwandeln, die die Individuen a und b enthält und dann einen cellfun durchführt. aber ich denke ich mache es zu kompliziert.

+0

Verwenden Sie 'x' und' y' als lineare Indexierung, durch die Länge der Spalten- 'c (Größe (c, 1) * (x-1) + y)' – Adiel

Antwort

3

Sie müssen zuerst die Orte in lineare Indizes umwandeln, dann können Sie die richtigen Elemente in der gewünschten linearen Reihenfolge erfassen.

ind = sub2ind(size(c), y, x); % Get linear indices 
v = c(ind); % Get the elements 

Dadurch ergibt somit:

>> v = c(ind) 

v = 

    3  1  1 

Sie können selbst überprüfen, dass jedes Paar von (y,x) Sie das richtige Element gibt, die Sie suchen Sie können sub2ind verwenden, um Ihnen dabei zu helfen. Bei y = 1 und x = 6 ist das abgerufene Element z. B. 3 und so weiter.

+1

@ Hojo.Timberwolf Sie sind herzlich willkommen ! – rayryeng

+1

@ Hojo.Timberwolf Als weitere Lektüre ist dies der Grund, warum Ihr Ergebnis eine Matrix und keine lineare Sequenz ist: https://stackoverflow.com/a/19731104/3250829. Wenn Sie Arrays für die Zeilen und Spalten einer Matrix angeben, sucht sie die Zeilen und Spalten, die sich überschneiden, und gibt eine Teilmenge dieser Matrix zurück. Weitere Informationen finden Sie in der Post. Mit dem Post müssen Sie deshalb jedes Paar Zeilen- und Spaltenkoordinaten in einen einzigen linearen Index konvertieren. Auf diese Weise können Sie einzelne Elemente und nicht eine Teilmenge der Matrix extrahieren. – rayryeng

Verwandte Themen