column dimensions of nonzero elements of each row in a matrix
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
george pepper
el 29 de Abr. de 2020
Comentada: george pepper
el 30 de Abr. de 2020
Hello,
I have a 10000 by 6 matrix that looks like
A=[0 0 0 0 1 1; 0 1 0 0 1 0; 0 0 1 1 0 0]
I would like to get 10000 by 1 vectors called dim1 and dim2 such that dim1 (dim2) contains the column number of the first (second) nonzero element in each row. In the above example,
dim1=[5;2;3];
dim2=[6;5;4];
Is there an easy way to write this without using a loop?
Thanks in advance.
2 comentarios
Walter Roberson
el 29 de Abr. de 2020
Editada: Walter Roberson
el 29 de Abr. de 2020
dim1 = sum(cumprod(A==0,2),2)+1;
At the moment, a formula for dim2 is not coming to mind without using an assignment.
Watch out for the case where there is no non-zero: the dim1 output would be 1 more than the number of columns.
Respuesta aceptada
Shunichi Kusano
el 30 de Abr. de 2020
Editada: Shunichi Kusano
el 30 de Abr. de 2020
Hi george,
How about this way?
[sorted,sorti] = sort(A, 2,'descend');
sorti(:,1) will be dim1 and sorti(:,2) will be dim2. If "A" has values more than 1, it must be
[sorted,sorti] = sort(A>0, 2,'descend');
hope this helps.
3 comentarios
Walter Roberson
el 30 de Abr. de 2020
[sorted,sorti] = sort(A~=0, 2,'descend');
rather than A>0, since A values might be negative
Más respuestas (0)
Ver también
Categorías
Más información sobre Loops and Conditional Statements en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!