2

在 MATLAB 我有一个像这样的单元格数组

a = { 1 2 2 3 4 5 [] []
      2 4 5 4 3 2 4 5 
      4 5 4 3 4 [] [] []}

我想以某种方式删除空元素:

a = { 1 2 2 3 4 5 2 4 5 4 3 2 4 5 4 5 4 3 4}

但是当我使用这个时:a(cellfun(@isempty,a)) = []; 我得到的是这个:

a = {1 2 4 2 4 5 2 5 4 3 4 3 4 3 4 5 2 4 5}

这不是我想要的

4

2 回答 2

2

问题是线性索引在行的方向上运行,即它穿过第一列,然后穿过第二列,依此类推。

当您调用reshape向量时,您可以看到这一点:

>> reshape([1 2 3 4 5 6 7 8 9],3,3)
ans =
     1     4     7
     2     5     8
     3     6     9

为了达到你想要的结果,你需要a在索引到它之前进行转置。

a = a';
a(cellfun(@isempty,a)) = [];
于 2012-07-16T13:26:58.863 回答
2

你可以试试这个:A(~cellfun('isempty',A))

于 2012-07-16T13:16:25.647 回答