删除多维数组中的空矩阵 ​​- MATLAB

时间:2014-03-15 19:15:56

标签: matlab multidimensional-array

我正在寻找一种在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); 

我试图让这个问题相当普遍,以便其他人也能从中受益,但如果我没有多大意义,请告诉我。

提前致谢:)

2 个答案:

答案 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