【问题标题】:Removing rows by indexing通过索引删除行
【发布时间】:2014-04-09 16:26:30
【问题描述】:

我有大约 300 行的单元格数组。该数组有 6 列。在第 6 列中,很多行都是零。我想从我的数组中删除这些行。

我正在使用下面的行,但收到​​一条错误消息,提示“未定义函数 'ne' 用于类型为 'cell' 的输入参数。”

myData = myData(myData(:,6) ~= 0);

【问题讨论】:

    标签: matlab


    【解决方案1】:

    如果是数字元胞数组,试试这个 -

    myData(~vertcat(myData{:,6}),6)={[]}
    

    myData(~cell2mat(myData(:,6)),6)={[]}
    

    或者这个,纯粹来自@chappjc的cmets

    myData(~[myData{:,6}],6)={[]}
    

    如果是字符元胞数组,试试这个 -

    myData(~str2double(myData(:,6)),6)={''}
    

    编辑 1:如果您想在第 6 列中的对应元素为零的情况下删除整行,请使用 : 索引整行。因此,上述代码将分别变为以下形式:

    myData(~vertcat(myData{:,6}),:)={[]}
    
    myData(~cell2mat(myData(:,6)),:)={[]}
    
    myData(~[myData{:,6}],:)={[]}
    
    myData(~str2double(myData(:,6)),:)={''}
    

    编辑 2:如果你想从单元格数组中删除所有空单元格的行,你可以使用这个 -

    myData(all(cellfun('isempty', myData),2),:) = []
    

    【讨论】:

    • 行索引向量不必是列,因此您甚至可以只执行horzcat 并简单地测试不等式 (myData = myData([myData{:,6}]~=0,6);)。 +1,但出于好奇,为什么要使用 ismember
    • 好吧,我想我最近迷上了ismember!但是,是的,这在这里是多余的。 [] 与数字单元阵列一起创造奇迹,谢谢!!
    • 这些解决方案确实将零更改为 [] 但我希望整行都被删除。有 6 行,前两行是文本,其余四行是数字,不确定这是否有区别。我还想我可以将数据复制到另一个矩阵,留下第 6 列为零的行
    • @mHelpMe 试试这个 - myData(~[myData{:,6}],:)={[]}
    • @mHelpMe 查看 Edit 2 以获得一些额外的东西!想法可能会派上用场。
    猜你喜欢
    • 2019-05-15
    • 2015-06-13
    • 2016-03-25
    • 1970-01-01
    • 2021-04-30
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多