【问题标题】:search and delete cell elements in matlab在matlab中搜索和删除单元格元素
【发布时间】:2016-05-07 12:29:25
【问题描述】:

我有一个由双精度和字符串组成的元胞数组,其中的特定列看起来像这样

abc = {[110;10];[20;110];[10];[220];[380];[15];[220];[110;15];[110;20];[110]};

我想删除所有小于 110 的元素,我尝试了这个语句abc(cellfun(@(x) any(x<110),abc),1) = [];

我收到一个错误空赋值只能有一个非冒号索引。有人可以解释并纠正这个吗?

我希望输出是这样的

abc = {[110];[110];[];[220];[380];[];[220];[110];[110];[110]};

谢谢!

【问题讨论】:

    标签: matlab cell-array


    【解决方案1】:

    abc = abc(~cellfun(@(x) any(x<110),abc),1)?

    这将反转逻辑索引,然后选择相应的条目。

    编辑:提供您的评论后,应该这样做:

    abc_out = cellfun(@(x) x(x>=110), abc, 'UniformOutput', false)
    

    【讨论】:

    • 我希望输出是这样 abc = {[110];[110];[];[220];[380];[];[220];[110]; [110];[110]};
    • 我猜如果有一个小于 110 的值,我们的两种方法都会删除整个单元格元素,而不仅仅是小于 110 的成员。
    • Any 将检查每个单元格条目(即子矩阵)的 any 元素,这意味着不会为您提供相应子条目的索引。所以任何在这里都不会帮助你。所以作为一个恢复:你只是想保留单元结构并删除每个
    • 好的,我编辑了我的答案,我希望我现在已经得到了你想要的输出 :-) 在这里使用 cellfun 和匿名函数应该可以解决问题。
    猜你喜欢
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-24
    相关资源
    最近更新 更多