Removing zeroes from 3d matrrix
2 views (last 30 days)
Show older comments
Hi,
I want to remove the zeros from a 3D matrix and bring the non zeroes values upwards. I am attaching the picture which will explain more clearly. I dont want to reduce slices..
The zeroes should be removed and non zeroes entries should face each other.
I looked at these links
But it is not working for me...
does anyone has an idea..?
0 Comments
Answers (2)
Image Analyst
on 27 Jun 2020
You cannot do that for a 3-D matrix. You must have the same number of elements even if you shift things around, unless you have a whole plane in the X, Y, or Z dimension that is all zeros. In that case you can remove a whole plane. Otherwise it's not clear which dimension and direction the column goes and what direction to shift it in.
Your screenshot shows a 2-D matrix, and for that, you can shift one column up if that's what you want to do. Untested code:
[rows, columns, slices] = size(m); % m is your array.
for col = 1 : columns
thisColumn = m(:, col);
% Remove zeros
thisColumn(thisColumn == 0) = [];
% Erase whole column at first.
m(:, col) = 0;
% Put back in the nonzero elements at the top.
m(1 : length(thisColumn), col) = thisColumn;
end
0 Comments
See Also
Categories
Find more on Resizing and Reshaping Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!