Dynamic-Calibration/utils/YALMIP-master/extras/setdiff1D.m

74 lines
1.5 KiB
Matlab
Executable File

function [c] = setdiff1D(a,b)
nIn = 2;
isrows = 0;
rowsA = size(a,1);
colsA = size(a,2);
rowsB = size(b,1);
colsB = size(b,2);
rowvec = ~((rowsA > 1 & colsB <= 1) | (rowsB > 1 & colsA <= 1) | isrows);
nOut = 1;
numelA = length(a);
numelB = length(b);
% Handle empty arrays.
if (numelA == 0)
% Predefine outputs to be of the correct type.
c = a([]);
ia = [];
% Ambiguous if no way to determine whether to return a row or column.
ambiguous = (rowsA==0 & colsA==0) & ...
((rowsB==0 & colsB==0) | numelB == 1);
if ~ambiguous
c = reshape(c,0,1);
ia = reshape(ia,0,1);
end
elseif (numelB == 0)
% If B is empty, invoke UNIQUE to remove duplicates from A.
if nOut <= 1
c = unique(a);
else
[c,ia] = unique(a);
end
return
% Handle scalar: one element. Scalar A done only.
% Scalar B handled within ISMEMBER and general implementation.
elseif (numelA == 1)
if ~ismember(a,b)
c = a;
ia = 1;
else
c = [];
ia = [];
end
return
% General handling.
else
% Convert to columns.
a = a(:);
b = b(:);
%a = double(a);
%b = double(b);
% end
% Call ISMEMBER to determine list of non-matching elements of A.
tf = ~(ismember(a,b));
%tf = ~(ismembc(sort(a),sort(b)));
c = a(tf);
c = uniquestripped(c);
end
% If row vector, return as row vector.
if rowvec
c = c.';
if nOut > 1
ia = ia.';
end
end