删除单元格数组中的所有空单元格

时间:2019-06-25 15:26:23

标签: arrays matlab cell-array

我有一个单元格数组,我想在其中选择3行,所以我使用了temp = testresults(13:15,1:end)

数组更大了,我有很多空单元格

{'Summary Test Re…'}    {'Overall'   }    {0×0 char          }    {'OVP Transition …'}    {0×0 char}    {0×0 char}    {0×0 char}    {0×0 char}    {0×0 char}    {0×0 char}
{'Pass/Fail'       }    {'Passed'    }    {'No Transition t…'}    {'Passed'          }    {0×0 char}    {0×0 char}    {0×0 char}    {0×0 char}    {0×0 char}    {0×0 char}
{'Failed cases'    }    {'No failure'}    {0×0 char          }    {'No failure'      }    {0×0 char}    {0×0 char}    {0×0 char}    {0×0 char}    {0×0 char}    {0×0 char}

因此,我正在尝试使用temp(~cellfun('isempty',temp))删除空单元格,但是,如果所有空单元格都消失了,它将把我的所有数据放在一列中:

{'Summary Test Results'          }
{'Pass/Fail'                     }
{'Failed cases'                  }
{'Overall'                       }
{'Passed'                        }
{'No failure'                    }
{'No Transition time change'     }
{'OVP Transition level pass/fail'}
{'Passed'                        }
{'No failure'                    }

我已经尝试过一些函数的变体,也尝试过使用cat(2, temp{:}),但是我不知道如何将数据保持在正确的位置。

如何在不触摸其余数据位置的情况下删除空白单元格?

1 个答案:

答案 0 :(得分:5)

给出一个像这样的单元格数组:

temp = {
'Summary Test Re…', 'Overall',    '', '',                 'OVP Transition …', '', '', '', ''
'Pass/Fail',        'Passed',     '', 'No Transition t…', 'Passed',           '', '', '', ''
'Failed cases',     'No failure', '', '',                 'No failure',       '', '', '', ''
'',                 '',           '', '',                 '',                 '', '', '', ''};

我们可以使用以下方式找到空单元格(如您已经发现的那样)

empty = cellfun('isempty',temp);

接下来,我们可以删除所有单元格都为空的行

temp(all(empty,2),:) = [];

以及所有单元格都为空的列

temp(:,all(empty,1)) = [];

all(empty,1)返回一个逻辑行向量,如果该列中的所有单元格都为空,则元素为true。我们使用此逻辑向量来索引这些数组元素并将它们设置为空数组。 MATLAB会说分配空数组就是删除数组元素。删除完整的行和列可以保留数组的形状。

请注意temp(:,1)=[]temp{:,1}=[]之间的区别。第一个删除一列数组元素,第二个删除一个空数组给单元格列中的每个单元格。