Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2008

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

Search the Archive

Re: choose elements from list based on elements in different list

  • To: mathgroup at smc.vnet.net
  • Subject: [mg86886] Re: choose elements from list based on elements in different list
  • From: "Dana DeLouis" <dana.del at gmail.com>
  • Date: Tue, 25 Mar 2008 01:16:12 -0500 (EST)

"Claus" <clausenator at gmail.com> wrote in message
news:frqpnb$4vl$1 at smc.vnet.net...
> Hi,
> I'm trying to choose elements from list based on elements in different 
> list and I came up with the ideas listed below. It seems to me that 
> there are a few too many steps involved here, and I need to run this on 
> larger lists (~20000 entries).
> Are there ways to improve this?
> Thanks,
> Claus
> 
> Here is the mathematica code:
> 
> Reihe1={22,33,44,0,0,16,5,0,0,0}
> Reihe2={16,27,0,0,5,11,5,0,0,12}
> 
> {22, 33, 44, 0, 0, 16, 5, 0, 0, 0}
> 
> {16, 27, 0, 0, 5, 11, 5, 0, 0, 12}
> 
> (*Find out where in Reihe1 and in Reihe2 are Zeros and notZeros*)
> 
> Reihe1Is0 = Thread[Reihe1 == 0]
> Reihe1Not0 = Thread[Reihe1 != 0]
> Reihe2Is0 = Thread[Reihe2 == 0]
> Reihe2Not0 = Thread[Reihe2 != 0]
> 
> {False, False, False, True, True, False, False, True, True, True}
> 
> {True, True, True, False, False, True, True, False, False, False}
> 
> {False, False, True, True, False, False, False, True, True, False}
> 
> {True, True, False, False, True, True, True, False, False, True}
> 
> (*Select the values of Reihe1 and Reihe2 which are of interest
> 
> There are 4 Cases (not all of them calculated later) :
>  Case1 :  Reihe1 and Reihe2 are 0
>  Case2 :  Reihe1 and Reihe2 are NOT 0
>  Case3 : (Reihe2 is NOT 0) AND (Reihe1 is 0)
>  Case4 : (Reihe1 is NOT 0) AND (Reihe2 is 0)*)
> 
> PreCase3=Pick[Reihe2,Reihe1Is0]
> PreCase4=Pick[Reihe1,Reihe2Is0]
> 
> {0, 5, 0, 0, 12}
> 
> {44, 0, 0, 0}
> 
> Case3=Select[PreCase3,#>0&]
> Case4=Select[PreCase4,#>0&]
> 
> {5, 12}
> 
> {44}


Hi.  Just another option would be to combine the two lists into an
integer.(0,1,2,or 3)


Reihe1 = {22, 33, 44, 0, 0, 16, 5, 0, 0, 0};
Reihe2 = {16, 27, 0, 0, 5, 11, 5, 0, 0, 12};

ptn = 2*DiscreteDelta /@ Reihe1 + DiscreteDelta /@ Reihe2

{0, 0, 1, 3, 2, 0, 0, 3, 3, 2}

Pick[Reihe2, ptn, 2]

{5, 12}

Pick[Reihe1, ptn, 1]

{44}

-- 
HTH   :>)
Dana DeLouis
Mathematica 6
But reading 5.2 Help. :>(





  • Prev by Date: Re: finding positions of elements in a list
  • Next by Date: Re: Counting nonzeros
  • Previous by thread: Re: Re: choose elements from list based on elements in different list
  • Next by thread: Ordering function