1
$\begingroup$

I need to create an array subtracting two arrays from another array. I know how to subtract one:

am = DeleteCases[amp, Alternatives @@ af]

I can subtract an array each time but there must be a way to subtract more than one array at once. So I want to subtract af and ai from amp. How can I do that at once?

$\endgroup$
1
$\begingroup$

You can use Select as well :

ar = Range[10];
ar1 = Range[1, 10, 2];
ar2 = Range[1, 10, 3];

Select[ar, Not[MemberQ[Union[ar1, ar2], #]] &]
(* {2, 6, 8} *)

DeleteCases[ar, _?(MemberQ[Union[ar1, ar2], #] &)]
(* {2, 6, 8} *)
$\endgroup$
  • 4
    $\begingroup$ Or, DeleteCases[ar, Alternatives @@ Union[ar1, ar2]]. $\endgroup$ – VLC Feb 25 '13 at 10:26
  • $\begingroup$ Not@MemberQ is equivalent to FreeQ. $\endgroup$ – chyanog Mar 11 '13 at 11:18
3
$\begingroup$

The built-in function Complement does exactly what you need:

enter image description here

With

ar = Range[10];
ar1 = Range[1, 10, 2];
ar2 = Range[1, 10, 3];

elements in the first list that are not in any of the subsequent lists are:

Complement[ar, ar1,ar2]
(* {2, 6, 8 *)
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.