Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.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
在matlab中删除超集时出错?_Matlab - Fatal编程技术网

在matlab中删除超集时出错?

在matlab中删除超集时出错?,matlab,Matlab,伙计们,我有一个名为“OccursTogether”的一维单元数组,每对都有值。我要做的是删除所有的超集,只保留这些子集,但我得到的输出不是我想要的,我使用的代码如下: [ii, jj] = ndgrid(1:numel(OccursTogether)); s = cellfun(@(x,y) all(ismember(x,y)), OccursTogether(ii), OccursTogether(jj)); s = triu(s,1); %// count each pair just o

伙计们,我有一个名为“OccursTogether”的一维单元数组,每对都有值。我要做的是删除所有的超集,只保留这些子集,但我得到的输出不是我想要的,我使用的代码如下:

[ii, jj] = ndgrid(1:numel(OccursTogether));
s = cellfun(@(x,y) all(ismember(x,y)), OccursTogether(ii), OccursTogether(jj));
s = triu(s,1); %// count each pair just once, and remove self-pairs
result = OccursTogether(~any(s,1));
{14}
{9 14 17}
{16}
{11}
{11 16}
{5}
{5 16}
{1}
{4 11 14}
我的意见如下:

[ii, jj] = ndgrid(1:numel(OccursTogether));
s = cellfun(@(x,y) all(ismember(x,y)), OccursTogether(ii), OccursTogether(jj));
s = triu(s,1); %// count each pair just once, and remove self-pairs
result = OccursTogether(~any(s,1));
{14}
{9 14 17}
{16}
{11}
{11 16}
{5}
{5 16}
{1}
{4 11 14}
现在我想要的输出是
{1 5 14 11 16}
,但是上面的代码返回空的
{}
输出


任何人都可以帮助获得所需的输出吗

我看到您正试图实现一个循环,在每个单元格上与每个其他单元格一起执行ismember;这将是相当计算密集的,我建议将单元格中的所有数字转换为向量,并使用histc(直方图),这是计算每个元素出现次数的快速有效方法,然后可以删除计数小于1的元素。否则,您可以尝试合并单元格并使用intersect,这也会更快。顺便说一句,如果您可以按循环的方式运行ismember,我不会起诉…@qmeeeee我不想计算出现次数,另一方面,对于要删除的元素,计数总是小于1是没有必要的。我知道这在计算上是昂贵的,但在这一点上我并不关心。循环有助于遍历每个元素并将其与其他单元格值进行比较。@qmeee如果您有比
ismember
更好的想法,请与meI共享假定您希望单元格中出现多次的元素?