필터 지우기
필터 지우기

non zero rows per column

조회 수: 3 (최근 30일)
babis
babis 2013년 12월 5일
편집: Alfonso Nieto-Castanon 2013년 12월 6일
i have a matrix. suppose
A=[1 0 8; 0 0 2; 3 0 5; 4 8 0; 0 5 3; 6 1 3; 1 6 5; 0 7 1]
and i want to get the non zero rows per column in a new matrix. in my example that will be
B = [ 1 3 4 6 7 0 0 0; 4 5 6 7 8 0 0 0; 1 2 3 5 6 7 8 0]
( if A=(m,n) B will be B=(n,m) )
  댓글 수: 2
dpb
dpb 2013년 12월 5일
Use the "Code" button (or insert couple spaces in front of code lines on separate line w/ blank line between it and preceding text) to format the code to be legible.
Azzi Abdelmalek
Azzi Abdelmalek 2013년 12월 5일
Babis, can you explain?

댓글을 달려면 로그인하십시오.

채택된 답변

Alfonso Nieto-Castanon
Alfonso Nieto-Castanon 2013년 12월 5일
편집: Alfonso Nieto-Castanon 2013년 12월 6일
If I understand your question correctly this should do:
[a,b]=sort(A>0,1,'descend');
B=a'.*b';

추가 답변 (2개)

dpb
dpb 2013년 12월 5일
"Deadahead" solution...
B=zeros(size(A))';
for i=1:size(A,2)
ix=A(:,i)~=0;
B(i,ix)=find(A(:,i));
end
  댓글 수: 2
babis
babis 2013년 12월 5일
i think that this is really close to what i want, thank you
dpb
dpb 2013년 12월 5일
편집: dpb 2013년 12월 5일
It reproduces you example (w/ the exception of the extra row of zeros which I presumed was an error). If that is indeed wanted, then just augment the end result. You can, of course, with care to keep parens nested properly, do away with the intermediary I used for clarity of exposition. So what is on "really close" about it instead of "dead on"?
It should be reasonably easy to accumarray or otherwise vectorize it w/ the idea given altho it's not convenient here at the moment...

댓글을 달려면 로그인하십시오.


José-Luis
José-Luis 2013년 12월 5일
your_mat = ndgrid(1:size(A,1),1:size(A,2));
your_mat(A==0) = 0;
your_mat(your_mat==0) = Inf;
your_mat = sort(your_mat);
your_mat(your_mat==Inf) = 0;

카테고리

Help CenterFile Exchange에서 Matrices and Arrays에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by