我有三个列向量:
A = [1;2;5;9;15]
B = [2;3;5;11;15]
C = [5;7;11;20;25]
我想通过搜索D
A
B
的所有元素来创建新的列向量C
,找到所有值并避免在{{{ 1}}。
我希望D
成为:
D
怎么做?
谢谢!
答案 0 :(得分:3)
这是另一种(超快速)方式,不使用unique
,如果只处理整数,则不使用循环:
A = [1;2;5;9;15];
B = [2;3;5;11;15];
C = [5;7;11;20;25];
tmp = [A;B;C]; % concat the vectors
R = min(tmp):max(tmp)+1; % the range of the values
ind = histcounts(tmp,R)>0; % find all elements within tmp
D = R(ind).' % extract the relevant values
此方法可以推广为双打:
A = [1.2;2.62;5.74;9.29;15.31];
B = [2.3;3;5;9.29;15.31];
C = [1.2;2.62;11;20;25];
tmp = sort([A;B;C]); % concat and sort the vectors
R = [tmp; max(tmp)+1]; % the range of the values
ind = histcounts(tmp,R)>0; % find all elements within tmp
D = tmp(ind) % extract the relevant values
但是,首先需要对值进行排序(在tmp
中)使得它比其他方法慢。
答案 1 :(得分:1)
此代码应该按您的要求执行:
% Your sample arrays
A=[1;2;5;9;15]
B=[2;3;5;11;15]
C=[5;7;11;20;25]
% [A,B,C] concatenates the arrays to one single array
% Unique finds unqiues values in the input array
[D, IA, ID] = unique([A,B,C]);
disp(D);
% D = array with unique values
% ID = array with unique natural number assigned to equal values for the
% original array
% IA = array that can be referenced against ID to find the value in the
% original array
% ID and IA can be used to recreate the original array
不使用“unique”的解决方案,这可能效率较低:
% SOLUTION WITHOUT USING UNIQUE
% Your variables
A=[1;2;5;9;15];
B=[2;3;5;11;15];
C=[5;7;11;20;25];
% Allocate a temporary array with your arrays concatenated
temp = sort([A;B;C]);
rep_count = 0; % Count number of repeat values
% Allocate a blank array for your output
D = zeros(length(temp),1);
D(1) = temp(1); % Initialise first element (is always unique)
% Iterate through temp and output unqiue values to D
for i = 2:length(temp)
if (temp(i) == D(i-1-rep_count))
rep_count = rep_count+1;
else
D(i-rep_count) = temp(i);
end
end
% Remove zeros at the end of D
D = D(1:length(D)-rep_count);
disp(D)