2

这篇文章与使用空括号 [] 的“删除元素”操作有关。

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

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

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

提前致谢!

4

3 回答 3

2

从您的评论看来,newinter它不包含索引,而是包含实际值,但是您将其用于索引。要按值删除元素,您可以改用此代码

for i=1:11
    inter2{i}(ismember(inter2{i}, newinter{i}))=[];
end
于 2013-08-01T17:33:08.630 回答
0

如果要使用 删除元素,使用 intersect 的解决方案肯定是要走的路[],但通常最简单的方法是从一个向量中获取不在另一个向量中的元素setdiff

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

我可以想象,如果这是一个问题,这会带来更好的性能。

于 2013-08-01T21:36:25.460 回答
0

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

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

请注意,如果您尝试删除单元格的内容而不是单元格本身,则将其倒退。{}访问单元格的内容,同时返回单元格本身,因此如果要保持单元格完整(),则应使用。{}有关示例案例,请参见此链接。

于 2013-08-01T16:20:59.450 回答