non zero rows per column
3 次查看(过去 30 天)
显示 更早的评论
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
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.
采纳的回答
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
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 个评论
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
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;
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrices and Arrays 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!