Matlab 给定向量的单元格数组,删除作为任何其他向量子集的向量

Matlab 给定向量的单元格数组,删除作为任何其他向量子集的向量,matlab,cell,Matlab,Cell,我想删除c单元的所有子集,假设我有6个单元向量:c{1}=[123];c{2}=[2 3 4]; c{3}=[1 2 3 4 5 6];c{4}=[2 3 4 7];c{5}=[2 3 7];c{6}=[4 5 6];然后我想删除[1 2 3],[2 3 4]和[4 5 6]。我使用了两个for循环来查找所有这些子集,但是对于大型数据集来说太慢了,有什么简单的方法可以做到这一点吗?下面的代码删除了一个向量,如果它是任何其他向量的子集。该方法非常类似于: 请注意,在您的示例中,[2 3 7]也应删

我想删除c单元的所有子集,假设我有6个单元向量:c{1}=[123];c{2}=[2 3 4];
c{3}=[1 2 3 4 5 6];c{4}=[2 3 4 7];c{5}=[2 3 7];c{6}=[4 5 6];然后我想删除[1 2 3],[2 3 4]和[4 5 6]。我使用了两个for循环来查找所有这些子集,但是对于大型数据集来说太慢了,有什么简单的方法可以做到这一点吗?

下面的代码删除了一个向量,如果它是任何其他向量的子集。该方法非常类似于:


请注意,在您的示例中,
[2 3 7]
也应删除。

您可以使用以下方法找到与特定输入向量s1完全匹配的单元格:

indx = find(cell2mat(cellfun(@(x)strcmp(num2str(x),num2str(s1)),c,'un', 0)));
然后,您可以循环匹配项(现在应该是一个更小的集合),并通过将其内容设置为空集来删除它们:

for ii=1:length(indx)
    c{:,ii} = [];
end

您能否指定删除所依据的标准?这取决于位置还是单元格内容?关键是我不知道s1,我需要找到并删除它们,知道吗?如何确定需要删除哪些集合?关键是我不知道这些子集,我需要先找到它们,然后删除它们。如果你不知道要删除哪些子集,你是如何找到它们或删除它们的?也许我没有解释清楚,我有一些细胞向量,其中一些是其他细胞向量的子集,我想先找到它们,然后删除它们。@Yevis现在你已经问了6个关于细胞数组的问题,你有没有想过写一个向量化的代码?
for ii=1:length(indx)
    c{:,ii} = [];
end