Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 删除数组单元格中的元素_Arrays_Matlab_Cell Array - Fatal编程技术网

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

Arrays 删除数组单元格中的元素,arrays,matlab,cell-array,Arrays,Matlab,Cell Array,这篇文章与“删除元素”操作有关,该操作使用空括号[] 我正在尝试使用[]删除单元格中的特定元素。前一篇文章提到,对数组使用()而不是{}with[]是删除元素而不是整个单元格的合适语法。但是,此语法似乎不起作用(错误:()-索引必须在索引表达式中最后出现)。我的原始代码如下所示,它利用{}而不是()从inter2的相应单元格中删除newinter的每个单元格中包含的元素 for i=1:11 inter2{i}(newinter{i}) = []; end inter2是一个1X11阵

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

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

for i=1:11
    inter2{i}(newinter{i}) = [];
end
inter2是一个1X11阵列。newinter也是一个1x11阵列。我使用数组和矩阵,因为这些数组的单元格中包含的每个向量的长度不同


提前谢谢

我现在不在MATLAB pc附近,但请尝试:

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

请注意,如果您试图删除单元格的内容,而不是单元格本身,则会将其向后移动
{}
访问单元格的内容,而
()
返回单元格本身,因此如果要保持单元格的完整性,应该使用
{}
。请参阅示例案例。

从您的评论来看,
newinter
似乎不包含索引,但包含实际值,无论您如何使用它进行索引。要按值删除元素,可以改用此代码

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

如果您想使用
[]
删除元素,使用intersect的解决方案无疑是一种可行的方法,但是通常,从一个向量中获取不在另一个向量中的元素的最简单方法是使用
setdiff

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

我可以想象,如果这是一个问题的话,这将提供稍微好一点的性能。

您好,谢谢您的回复。我试过你的代码,理解了它背后的逻辑。但是,我尝试了它并收到以下错误:将单元格内容分配给非单元格数组对象。所以,我在inter2{I}之后尝试了()而不是{},但得到了另一个错误:矩阵索引超出了删除范围。这个错误是我第一次使用原始问题中显示的代码时遇到的错误。好的,我要明确一点,每个
inter{I}
是它自己的数组吗?inter2是一个包含11个单元格指针的单元格数组,每个指针都是1X110向量。即使这些向量大小相同,但它们的大小也会不同,因为另一个包含11个单元格指针的单元格数组newinter由11个大小不同的1X_uu向量组成,每个向量的列数不超过20列。除了问题中的注释要求的信息,我想在你的问题中补充这一点,以提供更多的细节。你可以添加一个小规模的例子,说明你的数据和目标是什么样的吗?类似于:
inter2={[1 2 3],[1 2]}
并且应该变成
{[1 3],[2]}
。另外,您没有提到示例代码给出了什么错误(只有备用代码给出了什么错误)。当然!inter2中的一个单元格可以是:[86 56 96 14 11],而newinter中相应的单元格(例如i=1)可以是[86 56].我想要的结果是inter2=[96 14 11].在这种情况下,我对顺序没有任何偏好。我只是想将newinter中的元素从inter2中删除。另外,原始错误是:矩阵索引超出了删除范围。我猜您已经找到了解决方案,只是想详细说明一下:您试图将第86和56个元素设置为零,而ava中只有5个元素ilable.YES!太棒了。我不知道我用它来索引还是元素搜索。谢谢!