p{1} = [1 2]
p{2} = [1 2]
p{3} = [3 4 5]
p{4} = [3 4 5]
p{5} = [1 3 4 5]
p{6} = [1 3 4 5]
这样的数据,可能会有很多,如何删除其中的重复项,不用循环判断,如何能高效完成
可用换一些方法转化为字符串,例如用sprintf:
[~,k] = unique(cellfun(@(x)sprintf(’%.20g ',numel(x),size(x),x),p,‘un’,0));
c = p(k);
或者更快的序列化:
[~,k] = unique(cellfun(@char,cellfun(@getByteStreamFromArray,p,‘un’,0),‘un’,0));
c = p(k);
另外在新版本中containers.Map的性能也不错,对于大规模的数据结合序列化可以比上边两种方法都快:
c = cellfun(@getArrayFromByteStream,…
cellfun(@uint8,…
containers.Map(…
cellfun(@char,…
cellfun(@getByteStreamFromArray,p,‘un’,0),…
‘un’,0),zeros(size§)).keys,‘un’,0),‘un’,0);
本文介绍了一种不使用循环即可高效去除数组中重复项的方法,并提供了两种实现方式:一种是通过字符串化元素,另一种是通过序列化元素。此外还提到了在新版本中使用containers.Map的高性能替代方案。
1164

被折叠的 条评论
为什么被折叠?



