poster
2019-12-04, 19:28
我有一个数组S ,它具有一些唯一的元素。我想添加数组N中尚未在S元素。
一种语法上简单的方法是:
S = union( S, N, 'stable' ); 我发现使用ismember手动添加可能会比较慢,而使用隐式扩展会更快:
% ismember approach S = [S; N(~ismember(N,S))]; % imp. expansion approach S = [S; N(~any(S(:)==N(:).',1))]; 但是,在循环内执行此操作仍然感觉很脏,并且隐式扩展对于大型输入而言可能会非常昂贵。
有更高效的替代方案吗?
如果有帮助,我们可以假设S和N仅包含整数。但是,我们不能假设S是排序的,从N追加的新元素可以是任何正整数。
最小示例:
Ntest = [1 2 3 4 2 5 3 6 1 5 7 9]; S = []; for ii = 1:3 N = Ntest(ii,:); S = union(S,N,'stable'); end % S = [ 1; 2; 3; 4; 5; 6; 7; 9 ] 在实际情况下,我Ntest上面的Ntest那样Ntest知道N的潜在值。
更多&回答... (https://stackoverflow.com/q/59174480)
一种语法上简单的方法是:
S = union( S, N, 'stable' ); 我发现使用ismember手动添加可能会比较慢,而使用隐式扩展会更快:
% ismember approach S = [S; N(~ismember(N,S))]; % imp. expansion approach S = [S; N(~any(S(:)==N(:).',1))]; 但是,在循环内执行此操作仍然感觉很脏,并且隐式扩展对于大型输入而言可能会非常昂贵。
有更高效的替代方案吗?
如果有帮助,我们可以假设S和N仅包含整数。但是,我们不能假设S是排序的,从N追加的新元素可以是任何正整数。
最小示例:
Ntest = [1 2 3 4 2 5 3 6 1 5 7 9]; S = []; for ii = 1:3 N = Ntest(ii,:); S = union(S,N,'stable'); end % S = [ 1; 2; 3; 4; 5; 6; 7; 9 ] 在实际情况下,我Ntest上面的Ntest那样Ntest知道N的潜在值。
更多&回答... (https://stackoverflow.com/q/59174480)