Matrix Indices Problem

1 vue (au cours des 30 derniers jours)
mutt
mutt le 15 Août 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]

Réponse acceptée

Sean de Wolski
Sean de Wolski le 15 Août 2011
[junk, idx] = max(logical(A),[],2)
idx will be you index vector.
  6 commentaires
Fangjun Jiang
Fangjun Jiang le 15 Août 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 le 16 Août 2011
Thanks to everyone for contributing. In practice I wouldn't use the sort approach because my real matrix is very large.

Connectez-vous pour commenter.

Plus de réponses (1)

Andrei Bobrov
Andrei Bobrov le 15 Août 2011
size(A,2)+1-sum(cumsum(A,2)~=0,2)
more
(sum(cumsum(A')==0)+1)'
  2 commentaires
mutt
mutt le 15 Août 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 le 16 Août 2011
Hi Mutt! my variant:
sum(cumsum(flipud(A'))>0)'

Connectez-vous pour commenter.

Catégories

En savoir plus sur Matrix Indexing dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by