我正在寻找一种在MATLAB中删除多维数组中的空矩阵的方法。
例如,我有一个4-D数组,例如:
N = 5;
Arr = zeros(2,2,4,N);
假设只有N = 2且N = 4有值(即N = 1,3和5中的四个2x2矩阵为零),我怎样才能创建另一个多维数组ArrFin(2,2,4,2)这样
ArrFin(2,2,4,1) = Arr(2,2,4,2);
ArrFin(2,2,4,2) = Arr(2,2,4,4);
我试图让这个问题相当普遍,以便其他人也能从中受益,但如果我没有多大意义,请告诉我。
提前致谢:)
答案 0 :(得分:2)
想出了一个非常简洁的方法:
ArrFin = Arr(:,:,:,any(any(any(Arr,3))));
这会选出非零矩阵并将它们保存到ArrFin中。
答案 1 :(得分:0)
<强>代码强>
%%// Create data
Arr= rand(2,2,4,5);
Arr(:,:,:,[1 3 5]) = 0;
%%// Get new reduced matrix and check for its size
ArrFin = Arr(:,:,:,find(sum(reshape(sum(Arr,3),size(Arr,3),size(Arr,4)),1)));
size_check = size(ArrFin)
<强>输出强>
size_check =
2 2 4 2