returns elements that are in a set but not in another one.
v = setdiff(a, b) v = setdiff(a, b, orien) [v, ka] = setdiff(..)
a set of elements
elements to remove from a
.
"r"
: rows of
a
are searched among b
ones."c"
: columns of
a
are searched among b
ones.a
are searched among
b
ones.If the option orien="r"
is used, a
and b
must have the same number of columns.
If the orien="c"
is used, they must have the same
number of rows.
a
's data type and encoding:
a
's components that are not in
b
.orien="r"
: matrix of rows of a
that are not in b
, sorted in lexicographic order.orien="c"
: matrix of columns of a
that are not in b
, sorted in lexicographic order.vector of linear indices of selected a
's components,
rows, or columns, such that
v = a(ka)
, orv = a(ka,:)
(orien="r"
), orv = a(:,ka)
(orien="c"
)setdiff(a, b,..)
computes and returns the elements or rows or columns
of a
that are not in b
.
All duplicates (elements or rows or columns) are removed from a
and
from b
before processing.
Both a
and b
must have the same
data type (and integer type), but may mix dense and sparse encoding.
It can be vectors, matrices or hypermatrices of real or complex numbers, encoded integers, booleans, or strings. Sparse-encoded inputs are also accepted.
If a
is an hypermatrix and the "r"
option is used,
a
is replaced with the matrix of all its rows over all its higher
dimensions, before processing.
Same thing if b
is an hypermatrix.
If the "c"
option is used, a
or/and
"b"
are replaced with the respective matrices of all their columns.
The format of results is presented in the following table, according to the shape of
a
and the orien
option. In all cases, if all
entities of a
are in b
,
[]
is returned for v
as for ka
:
orien → | none | "r" | "c" | |||
---|---|---|---|---|---|---|
a ↓ | v | ka | v | ka | v | ka |
row | row | row | row | scal | row | row |
column | col | col | col | col | col | scal |
matrix | col | col | mat | col | mat | row |
hypermatrix | col | col | mat | col | mat | row |
scalar | scal | scal | scal | scal | scal | scal |
v
and ka
become empty
if a
is empty (whatever is b
), or if all
a
elements are in b
.
For booleans, setdiff(…)
is useful mainly with the "r" or "c" options.
Example #1:
--> a = grand(1, 10,"uin", 0, 9) a = 2. 2. 4. 5. 4. 1. 9. 5. 8. 3. --> b = grand(2, 4, "uin", 0, 9) b = 5. 0. 9. 9. 5. 6. 0. 4. --> [d, k] = setdiff(a, b); --> d, k d = 1. 2. 3. 8. k = 6. 1. 10. 9.
Example #2: column-wise processing
--> a = grand(2, 7,"uin", 0, 3) a = 0. 1. 0. 2. 3. 0. 2. 2. 2. 2. 1. 0. 1. 2. --> b = grand(2, 10, "uin", 0, 3) b = 1. 1. 3. 1. 1. 1. 3. 0. 2. 0. 3. 3. 2. 2. 0. 0. 1. 0. 1. 0. --> [d, k] = setdiff(a, b, "c"); --> d, k d = 0. 0. 2. 3. 1. 2. 2. 0. k = 6. 1. 7. 5.
Example #3: with some text
v1 = tokens("ab ca ba bb ca cb ba aa cc bc ac aa")' v2 = tokens("cc ac ca bb ac bc ab")' [r, k] = setdiff(v1, v2); r, k | ![]() | ![]() |
--> v1 = tokens("ab ca ba bb ca cb ba aa cc bc ac aa")' v1 = !ab ca ac bb ca cb ba aa cc bc ac aa ! --> v2 = tokens("cc ac ca bb ac bc ab")' v2 = !cc ac ca bb ac bc ab ! --> [r, k] = setdiff(v1, v2); --> r, k r = !aa ba cb ! k = 8. 3. 6.
Version | Description |
< 5.0 | Function introduced. |
6.0.2 | Option "r" | "c" added, including for hypermatrices. |
6.1.0 | Extension to complex numbers. |
6.1.1 | Boolean inputs and sparse inputs (boolean or numeric) are now accepted. |