finding last non-zero value from column
1 次查看(过去 30 天)
显示 更早的评论
Given a matrix looking something like e.g. M = [ 1 1 1 1 1 1 ; 1 1 1 0 0 0 ; 1 1 0 0 0 0 ; 1 0 0 0 0 0; 0 0 0 0 0 0 ];
How can I find the coordinate (for plotting these values as a line) for which states the last non-zero element in each column?
For this example I want the coordinates for the column number [ 4, 3, 2, 1, 1, 1]
Would the same code work for 3D-matrix?
2 个评论
Sean de Wolski
2011-8-15
We could absolutely get the code to work for a 3d matrix, but you have to define what you want. Would you want a two d plane through the third dimension with each column's contribution, or would you like it reshaped?
采纳的回答
Fangjun Jiang
2011-8-15
M = [ 1 1 1 1 1 1 ; 1 1 1 0 0 0 ; 1 1 0 0 0 0 ; 1 0 0 0 0 0; 0 0 0 0 0 0 ];
n=M~=0;
[dummy,Index]=sort(n);
Index=Index(end,:).*any(n)
Use M=randint(x,y) to generate testing data, I am thinking my solution has an edge.
for 3D matrix:
clear M;clc;
M(1,:,:) = [ 1 1 1 1 1 1 ; 1 1 1 0 0 0 ; 1 1 0 0 0 0 ; 1 0 0 0 0 0; 0 0 0 0 0 0 ];
M(2,:,:) = [ 1 1 1 1 1 1 ; 1 1 1 1 1 1 ; 1 1 1 1 1 0 ; 1 1 1 1 0 0; 1 1 1 0 0 0 ];
M(3,:,:) = [ 1 1 1 1 1 1 ; 1 1 1 1 1 0 ; 1 1 1 1 1 0 ; 1 1 1 1 0 0; 1 1 1 1 0 0 ];
M(4,:,:) = [ 1 0 0 0 0 0 ; 1 0 0 0 0 0 ; 1 1 0 0 0 0 ; 1 1 0 0 0 0; 1 1 0 0 0 0 ];
n=M~=0;
[dummy,Index]=sort(n,2);
Index=Index(:,end,:).*any(n,2);
Index=reshape(Index,size(M,1),size(M,3))
3 个评论
Fangjun Jiang
2011-8-15
All right! See updated version! Considered all-zero columns for both 2D and 3D!
更多回答(2 个)
Sean de Wolski
2011-8-15
[junk, idx] = max(flipud(M),[],1); %flip it and find first maximizer
idx = size(M,1)-idx+1
for 3d:
[junk, idx] = max(flipdim(rand(10,10,10)>.5,1),[],1);
idx = size(M,1)-idx+1
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Data Distribution Plots 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!