2016-05-07 19 views
2

我有双打和字符串的单元阵列,其中一个特定的列看起来像这样搜索和删除在Matlab电池元件

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]}; 

谢谢!

回答

2

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

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

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

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

我想到了把是这样的ABC = {[110]; [110]; []; [220]; [380]; []; [220]; [110]; [110]; [110]}; –

+0

我猜想,如果有一个小于110的值,我们用两种方法都可以删除全部单元元素,而不是仅仅小于110的成员。 –

+0

任何将检查每个单元格入口(即子矩阵)的任何元素,这意味着不会让你获得相应子条目的索引。那么在这里,任何人都不会帮你。所以作为一个恢复:你只是想保持单元结构并删除每个<110的元素而不触及其他任何东西,对吧? – tim