Remove sub-matrix if any col are all nan (3D matrix)

조회 수: 3(최근 30일)
Dave 2015년 2월 19일
댓글: Dave 2015년 2월 19일
Hi, In a 3D matrix, I have 4 sub-matrices of 3x3, like A below
A=[1 2 nan; 2 5 nan; 4 2 nan];
A(:,:,2)=[3 4 5; 4 nan nan; 2 3 4];
A(:,:,3)=[8 nan nan; 1 nan nan; 8 nan nan];
A(:,:,4)=[1 2 3; 6 7 8; 3 3 5];
I need a new matrix that EXCLUDES the cases where the columns of A are ALL nan. In the case above submatrices A1 and A3 should be excluded, and the new matrix, say B, should be
B(:,:,1)=[3 4 5; 4 nan nan; 2 3 4];
B(:,:,2)=[1 2 3; 6 7 8; 3 3 5];
I'd also need the id of the sub-matrices of A to be finally used in B, in this case 2 and 4.
Let me know if it's not clear thanks

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

채택된 답변

Image Analyst 2015년 2월 19일
Using the any() and all() functions I'm sure you'll be able to figure it out - you're a smart engineer. These are useful functions to learn about as they are used often. Here's one way to do it:
A=[1 2 nan; 2 5 nan; 4 2 nan];
A(:,:,2)=[3 4 5; 4 nan nan; 2 3 4];
A(:,:,3)=[8 nan nan; 1 nan nan; 8 nan nan];
A(:,:,4)=[1 2 3; 6 7 8; 3 3 5]
% Find out what slices need to be deleted.
for z = 1 : size(A, 3)
deleteThisSlice(z) = any(all(isnan(A(:,:,z)), 1))
end
B = A(:, :, ~deleteThisSlice)
댓글 수: 1표시숨기기 없음
Dave 2015년 2월 19일
Neat.

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

Community Treasure Hunt

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

Start Hunting!