Zeilen und Spalten
Da die Ausgabe für alle Integer-Änderungen , ein Zellen-Array wird die gesamte Aufgabe erfüllen. Für die gesamte Matrix, können Sie so etwas wie:
A = randi(4,10,30); % some data
Row = repmat((1:size(A,1)).',1,size(A,2)); % index of the row
Col = repmat((1:size(A,2)),size(A,1),1); % index of the column
pos = @(n) [Row(A==n) Col(A==n)]; % Anonymous function to find the indices of 'n'
als für jeden n
Sie schreiben können:
>> pos(3)
ans =
1 1
2 1
5 1
6 1
9 1
8 2
3 3
. .
. .
. .
wobei die erste Spalte die Zeile ist, und die zweite ist die Spalte für jede Instanz von n
in A
.
Und für alle n
s können Sie verwenden, um eine arrayfun
:
positions = arrayfun(pos,1:max(A(:)),'UniformOutput',false) % a loop that goes over all n's
oder eine einfache for
Schleife (schneller):
positions = cell(1,max(A(:)));
for n = 1:max(A(:))
positions(n) = {pos(n)};
end
Der Ausgang in beiden Fällen würde ein Zellenfeld sein:
positions =
[70x2 double] [78x2 double] [76x2 double] [76x2 double]
und für jede n
können Sie positions{n}
, schreiben zum Beispiel zu bekommen:
>> positions{1}
ans =
10 1
2 3
5 3
3 4
5 4
1 5
4 5
. .
. .
. .
Nur Reihen
Wenn alles, was Sie je eine bestimmte Zeile in der Spalte indizieren möchten und n
, können Sie schreiben:
A = randi(4,10,30);
row_pos = @(k,n) A(k,:)==n;
positions = false(size(A,1),max(A(:)),size(A,2));
for n = 1:max(A(:))
positions(:,n,:) = row_pos(1:size(A,1),n);
end
jetzt, positions
ist eine logische 3-D-Array, dass jede Zeile entspricht einer Zeile in A
, jede Spalte entspricht einem Wert von n
, und die dritte Dimension ist der Anwesenheitsvektor für die Kombination von Zeile und n
. Auf diese Weise können wir R
werden der Spaltenindex definieren:
R = 1:size(A,2);
und dann die entsprechenden Positionen für eine bestimmte Zeile und n
finden. Zum Beispiel ist der Spaltenindizes n=3
in Zeile 9:
>> R(positions(9,3,:))
ans =
2 6 18 19 23 24 26 27
dies wäre genau wie find(A(9,:)==3)
nennen, aber wenn Sie dies viele Male ausführen müssen, die alle Indizes finden und speichert sie in positions
(was logisch, so ist es nicht so groß) wäre schneller.
wird 'position_one gibt = finden (v == 1) 'mach die Arbeit für dich oder du brauchst etwas anspruchsvolleres? – brainkz
mein Problem mit find war, dass Sub2ind hatte ein Problem mit den linearen Indizes und ich konnte nicht herausfinden, warum;), aber ich werde versuchen, mit der zweiten Antwort gehen, da ich schon etwas ähnliches begonnen habe ..... danke für die Hilfe! – gwendolinese