finding last non-zero value from column
조회 수: 2 (최근 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에서 Surface and Mesh Plots에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!