Remove zeros from a 3D array
조회 수: 30 (최근 30일)
이전 댓글 표시
Hi,
I have a 3D array A = 90x38021x1633. The second dimension (38021) contains a lot of zeros as I have done zero padding before concatenating multiple 3D arrays to get A. How can I now remove these zeros such that B = 90xYx1633, where Y < 38021?
Thanks!
댓글 수: 0
채택된 답변
the cyclist
2020년 2월 3일
편집: the cyclist
2020년 2월 3일
Do you mean you have "slices" of all zeros? Then this should work:
% Create an array like your A matrix, where some "slices" of data is all zeros
A = repmat([0 0 0 0; 1 0 0 0; 1 0 1 0],[1 1 5]);
% Find indices to slices in the 1-3 plane that have any non-zeros.
idx = any(A ~= 0,[1 3]);
% Create B from only the slices that have non-zeros
B = A(:,idx,:);
Just use your A, instead of the pretend one I made. Also, you can combine the two steps by just doing
B = A(:,any(A ~= 0,[1 3]),:);
but I wanted to call out explicitly what is going on.
댓글 수: 0
추가 답변 (1개)
Nils Speetzen
2020년 2월 3일
Hi,
I assume you want to remove rows/planes containing only zeros. To find these, you can use
all(A==0, [1 3])
This searches for all planes where all entries along the first and third dimension are equal to zero.
To remove all those rows/planes, you can directly index A via this expression:
A(:,all(A==0, [1 3]),:) = []
I hope this helps!
댓글 수: 8
the cyclist
2020년 2월 3일
I'm not certain I fully understand, but I am getting some idea. Again, looking at just some small arrays as examples.
So maybe you had an array A1:
A1 = [1 2 0;
3 4 5];
where that zero was added for padding.
And you have another array A2:
A2 = [5 6 7;
8 9 0];
where that zero was also added for padding.
And you end up with A by concatenating A1 and A2 along the third dimension:
A = cat(3,A1,A2)
A(:,:,1) =
1 2 0
3 4 5
A(:,:,2) =
5 6 7
8 9 0
So A has some data where the zeros are not meaningful, and are just placeholders.
But, repeating my prior comment, you CANNOT just "remove" them. A matrix cannot have an "empty" spot.
You could do
A(A==0) = NaN
A(:,:,1) =
1 2 NaN
3 4 5
A(:,:,2) =
5 6 7
8 9 NaN
which replaces the zeros with NaN (not-a-number). You might then be able to do later steps in your calculation. Does that help?
참고 항목
카테고리
Help Center 및 File Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!