Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2011

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: A fast way to compare two vectors

  • To: mathgroup at smc.vnet.net
  • Subject: [mg121688] Re: A fast way to compare two vectors
  • From: Ray Koopman <koopman at sfu.ca>
  • Date: Mon, 26 Sep 2011 04:13:43 -0400 (EDT)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • References: <j5m44t$ple$1@smc.vnet.net> <j5mt8t$sn8$1@smc.vnet.net>

On Sep 25, 2:46 am, Ray Koopman <koop... at sfu.ca> wrote:
> [...]
> poscom[a,b] assumes that a and b are sorted lists of positive
> integers, with no within-list duplicates. It returns the positions
> in a of those values that are not also in b. It is equivalent to
> Flatten[Position[a,#]&/@Complement[a,b]].
>
> poscom[a_,b_] := Block[{r = ConstantArray[0,Max[a[[-1]],b[[-1]]]]},
>   r[[a]] = Range@Length@a; r[[b]] = ConstantArray[0,Length@b];
>   SparseArray[r] /. SparseArray[_,_,_,d_] :> d[[3]] ]

This may be faster than poscom for some data:

poskom[a_,b_] := Block[{r = Normal@SparseArray[ Automatic,
  {Max[a[[-1]],b[[-1]]]}, 0, {1, {{0, Length@a}, Transpose@{a}},
  Range@Length@a} ]}, r[[b]] = ConstantArray[0,Length@b];
  SparseArray[r] /. SparseArray[_,_,_,d_] :> d[[3]] ]




  • Prev by Date: Re: Count Number of Iteration [FindRoot]
  • Next by Date: Re: Manipulate for differences tables. Can I call as function?
  • Previous by thread: Re: A fast way to compare two vectors
  • Next by thread: Re: A fast way to compare two vectors