2017-11-07 1 views
0

Ich habe eine Matrix,Wie zuerst finden '1' in jeder Zeile in MATLAB

A = [ 0 0 0 0 0 0 1 1 1 1 0 0; 0 0 0 0 0 1 1 1 1 0 0 0; 0 0 0 0 0 0 1 1 1 1 0 0] 

Meine Frage ist, wie die erste '1' in jeder Zeile zu finden. Ich möchte die Ausgabe wie folgt zeigen:

B = [7; 6; 7] 

Bedeutung, dass für die erste Reihe, die Nummer 1 auf Spaltennummer gefunden 7, die zweite Zeile in Spaltennummer gefunden 6 und so weiter.

+0

lesen Sie mehr über [finden] (https://www.mathworks.com/help/matlab/ref/find.html) –

Antwort

7

Sie können die zweite Ausgabe von max verwenden, die die Position des Maximums gibt:

v = 1; % desired value 
[~, B] = max(A==v, [], 2); % position of maxima along the second dimension 

Als Bonus, wenn es Zeilen sein können, dass nicht enthalten den Wert gewünscht, Sie ausgeben kann 0 für die Zeilen wie folgt:

[m, B] = max(A==v, [], 2); 
B = B.*m; 
4

cumulative sum jede Reihe von A Suchen und find verwenden, um die Reihen- und Spalten-Indizes von Einsen zu bekommen und zu bestellen dann die Spalte Subskripte nach Zeilen B die gewünschten Matrix zu erhalten.

[rind,cind] = find(cumsum(A,2)==1); 
[~, rind] = unique(rind); 
B = cind(rind); 
Verwandte Themen