Matrix Indices Problem

7 Ansichten (letzte 30 Tage)
mutt
mutt am 15 Aug. 2011
Given a matrix e.g. A = [0 1 2 0 0; 0 3 4 5 0; 6 7 8 9 10; 0 0 0 11 0]
what MATLAB code will generate a vector of the column numbers of the first non-zero element in each row?
For this example the vector returned should be: [2;2;1;4]

Akzeptierte Antwort

Sean de Wolski
Sean de Wolski am 15 Aug. 2011
[junk, idx] = max(logical(A),[],2)
idx will be you index vector.
  6 Kommentare
Fangjun Jiang
Fangjun Jiang am 15 Aug. 2011
Use sort().
A = [0 1 2 0 0; 0 3 4 5 0; 6 7 8 9 10; 0 0 0 11 0];
[dummy,Ind]=sort(A~=0,2)
Ind=Ind(:,end)
To find first non-zero,
A = [0 1 2 0 0; 0 3 4 5 0; 6 7 8 9 10; 0 0 0 11 0];
[dummy,Ind]=sort(A~=0,2,'descend')
Ind=Ind(:,1)
mutt
mutt am 16 Aug. 2011
Thanks to everyone for contributing. In practice I wouldn't use the sort approach because my real matrix is very large.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Andrei Bobrov
Andrei Bobrov am 15 Aug. 2011
size(A,2)+1-sum(cumsum(A,2)~=0,2)
more
(sum(cumsum(A')==0)+1)'
  2 Kommentare
mutt
mutt am 15 Aug. 2011
Very good. And re-using that logic I have for the last non-zero elements:
size(A,2)+1-sum(not(logical(cumsum(A,2)-repmat(max(cumsum(A,2),[],2),1,size(A,2))))~=0,2)
Could this be simplified?
Andrei Bobrov
Andrei Bobrov am 16 Aug. 2011
Hi Mutt! my variant:
sum(cumsum(flipud(A'))>0)'

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by