删除数组MATLAB单元格中的元素

时间:2013-08-01 15:57:13

标签: arrays matlab cell-array

这篇文章涉及“删除元素”操作,该操作使用空括号[]。

我正在尝试使用[]删除单元格中的特定元素。之前的帖子提到,使用(而不是{}和[]作为数组是删除元素而不是整个单元格的合适语法。但是,此语法似乎不起作用(错误:() - 索引必须出现在索引表达式的最后。)我的原始代码如下,它使用{}而不是()从inter2的相应单元格中删除newinter的每个单元格中包含的元素。

for i=1:11
    inter2{i}(newinter{i}) = [];
end

inter2是1X11阵列。 newinter也是1x11阵列。我使用数组与矩阵,因为这些数组的单元格中包含的每个向量的长度是不同的。

提前致谢!

3 个答案:

答案 0 :(得分:2)

从您的评论中可以看出,newinter不包含索引,而是包含实际值,但您使用它进行索引。要按值删除元素,可以使用此代码

for i=1:11
    inter2{i}(ismember(inter2{i}, newinter{i}))=[];
end

答案 1 :(得分:0)

目前我不在MATLAB电脑附近,但请尝试:

for i=1:11
    inter2{i}(1,newinter{i})=[];
end

请注意,如果您尝试删除单元格的内容而不是单元格本身,那么您已经倒退了。 {}访问单元格的内容,而()返回单元格本身,因此如果要保持单元格完整,则应使用{}。有关示例案例,请参阅this link

答案 2 :(得分:0)

如果你想使用[]删除元素,那么带有intersect的解决方案肯定是要走的路,但是一般来说,从一个向量中获取不在另一个向量中的元素的最简单方法是使用{{1 }}。

setdiff

我可以想象,如果这是一个值得关注的话,这会带来更好的表现。