matlab - Matlab:如何删除具有其他集合作为子集的单元格元素
问题描述
我有一个包含数组的单元格:
C = {[1,2,3,4], [3,4], [2], [4,5,6], [4,5], [7]}
我想输出:
D = {[3,4], [2], [4,5], [7]}
D 中的那些集合是唯一包含 D 中任何其他集合的集合。
请参考以下链接了解类似问题。虽然很优雅,但我无法修改代码(还)以适应我的特定问题。
对于解决方案的任何帮助,我将不胜感激。
谢谢!
解决方案
从链接的帖子开始,您可以形成s
表示所有集合对之间相似元素数量的矩阵。结果将是:
C = {[1,2,3,4], [3,4], [2], [4,5,6], [4,5], [7]};
n = cellfun(@numel,C); % find length of each element.
v = repelem(1:numel(C),n); % generate indices for rows of the binary matrix
[~,~,u] = unique([C{:}]); % generate indices for rows of the binary matrix
b = accumarray([v(:),u(:)],ones(size(v)),[],@max,[],true); % generate the binary matrix
s = b * b.'; % multiply by its transpose
s(1:size(s,1)+1:end) = 0; % set diagonal elements to 0(we do not need self similarity)
result=C(~any(n(:) == s)) ;
但是矩阵可能非常大,所以最好使用循环来避免内存问题:
idx=false(1,numel(C));
for k =1:numel(C)
idx(k) = ~any(n == full(s(k, :))) ;
end
result=C(idx) ;
或遵循矢量化方法:
[r, c, v] = find(s) ;
idx = sub2ind(size(s), r, c) ;
s(idx) = v.' == n(r) ;
result = C(~any(s)) ;
推荐阅读
- laravel - 在 Laravel 5 上全局捕获 ModelNotFoundException
- solr - 胡萝卜:同一查询的不同集群
- python - 有没有办法在 python 中的子进程调用之间保持/转移 bash 环境?
- asp.net-mvc - AS NET MVC 如何使用变量跟踪复选框值
- javascript - AssertionError: - 预期 [true] 为 [true]。在量角器中
- reactjs - Android中的上滑动画问题 - React Native
- extjs - 如何在 Ext.grid.EditorGridPanel 中制作 selectRow
- android - 在 Flutter 中处理 Cookie
- java - 如何仅覆盖接口的少数方法?
- ios - 如何像 Swift 中的 Uber 共享一样在 GoogleMap 中绘制曲线形状折线?