How to remove null matrices from a multidemensional array?

1 次查看(过去 30 天)
Hi, I'd like to remove all null matrices from a 3-dimensional array.
Suppose I have the following 3x3x5 multidimensional matrix, where the first and the third matrices are null. ¿How can I remove the null matrices such that the resulting multidimensional matrix is 3x3x3?
Matrix(:,:,1) =
0 0 0
0 0 0
0 0 0
Matrix(:,:,2) =
-0.6842 0.8145 0.7498
0.8353 1.5250 0.0004
-1.5288 0.4317 1.3572
Matrix(:,:,3) =
0 0 0
0 0 0
0 0 0
Matrix(:,:,4) =
1.4528 0.0807 0.3814
-0.1675 -0.7258 1.0134
-0.1237 -0.3353 0.6182
Matrix(:,:,5) =
1.2482 0.1368 0.8166
0.8369 1.8682 -0.6398
-1.0774 -1.1223 0.8522
Thanks for your help!

采纳的回答

Max Heiken
Max Heiken 2021-6-10
编辑:Max Heiken 2021-6-10
You could identify the all zero pages and remove them like this:
Matrix(:, :, ~any(Matrix, [1, 2])) = [];

更多回答(1 个)

Steven Lord
Steven Lord 2021-6-10
Use the capability of the any function to accept a vector of dimensions over which to operate.
z = zeros(3);
r = @() rand(3);
M = cat(3, z, r(), z, r(), r())
M =
M(:,:,1) = 0 0 0 0 0 0 0 0 0 M(:,:,2) = 0.5431 0.5116 0.6777 0.3478 0.2512 0.9538 0.9902 0.5727 0.1137 M(:,:,3) = 0 0 0 0 0 0 0 0 0 M(:,:,4) = 0.5013 0.7561 0.0333 0.7886 0.6559 0.0514 0.8881 0.1103 0.9360 M(:,:,5) = 0.0428 0.5918 0.6839 0.4889 0.5199 0.2981 0.1230 0.2536 0.2200
whichPagesHaveData = any(M, [1 2])
whichPagesHaveData = 1×1×5 logical array
whichPagesHaveData(:,:,1) = 0 whichPagesHaveData(:,:,2) = 1 whichPagesHaveData(:,:,3) = 0 whichPagesHaveData(:,:,4) = 1 whichPagesHaveData(:,:,5) = 1
M2 = M(:, :, whichPagesHaveData)
M2 =
M2(:,:,1) = 0.5431 0.5116 0.6777 0.3478 0.2512 0.9538 0.9902 0.5727 0.1137 M2(:,:,2) = 0.5013 0.7561 0.0333 0.7886 0.6559 0.0514 0.8881 0.1103 0.9360 M2(:,:,3) = 0.0428 0.5918 0.6839 0.4889 0.5199 0.2981 0.1230 0.2536 0.2200
isequal(M(:, :, 4), M2(:, :, 2)) % page 4 of M is page 2 of M2 by the way we constructed M
ans = logical
1

类别

Help CenterFile Exchange 中查找有关 Matrices and Arrays 的更多信息

产品


版本

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by