       Re: logical indexing using more than one variable in a pure function

• To: mathgroup at smc.vnet.net
• Subject: [mg53354] Re: [mg53342] logical indexing using more than one variable in a pure function
• From: Bob Hanlon <hanlonr at cox.net>
• Date: Sat, 8 Jan 2005 02:39:21 -0500 (EST)
• Sender: owner-wri-mathgroup at wolfram.com

```x={2,3,4,5,6};

x1={6,5,4,3,2};

{False,False,True,True,True}

#>3&/@x

{False,False,True,True,True}

{False,False,False,True,True}

Inner[Greater,x,x1,List]

{False,False,False,True,True}

Inner[#1>#2&,x,x1,List]

{False,False,False,True,True}

{5,6}

True]]]]

{5,6}

First/@Cases[Transpose[{x,x1}],
x_?(#[]>#[]&)]

{5,6}

Cases[Transpose[{x,x1}],
x_?(#[]>#[]&):>x[]]

{5,6}

First/@Select[Transpose[{x,x1}],
#[]>#[]&]

{5,6}

Bob Hanlon

>
> From: Ben Barrowes <barrowes at alum.mit.edu>
To: mathgroup at smc.vnet.net
> Date: 2005/01/06 Thu PM 10:00:43 EST
> Subject: [mg53354] [mg53342] logical indexing using more than one variable in a pure
function
>
> I am trying to pick out values from a matrix using a logical mask, i.e.
> using logical indexing.
>
>
> I wish the following:
> x = {2, 3, 4, 5, 6}
> y = {True, False, False, True, True}
> x[[y]]
> would produce:
> {2,5,6}
> \!\(\*
>    RowBox[{\(Part::"pspec"\), \(\(:\)\(\ \)\), "\<\"Part specification \
> \\!\\({True, False, False, True, True}\\) is neither an integer nor a
> list of \
> integers. \\!\\(\\*ButtonBox[\\\"More\[Ellipsis]\\\", \
> ButtonData:>\\\"General::pspec\\\"]\\)\"\>"}]\)
> {2, 3, 4, 5, 6}\[LeftDoubleBracket]{True, False, False, True,
>      True}\[RightDoubleBracket]
>
>
> Here are some working examples when the mask depends upon only one
variable:
>
> pick out values in x > 4
> Select[x, (#1 > 4 &)]
> {5, 6}
>
> BooleanSelect seems to do what I want if I have a logical mask already:
> << Statistics`DataManipulation`
> BooleanSelect[x, y]
> {2, 5, 6}
> And now in 5.1, "Pick" does the same thing as BooleanSelect.
> But how can I do this in one line? (no need to define y explicitly)
> Something like:
> Pick[x,x>3]
>
>
>
> This seems to work for cases:
> Cases[x, x_ /; x > 3]
> {4, 5, 6}
> and similarly for select:
> Select[x, # > 3 &]
> {4, 5, 6}
>
>
> But if I have a second List:
> x1 = {6, 5, 4, 3, 2}
>
> How would I index x based on a logical operation on both x and x1?
> I hoped something like this would work:
> Pick[x,x>x1]
> or
> Cases[x, {x_,x1_} /; x>x1]
> {}
> But only x is provided to the pattern match, not {x_,x1_}.
>
> Or maybe a better Select statement. But how do I make the pure function
> accept two arguments?
>
> For that matter, how can I perform an element by element logical
> operation on a list? For example, I would like:
> x>3
> to return
> {False,False,True,True,True}
> {2, 3, 4, 5, 6} > 3
> and
> x>x1
> to return
> {False,False,False,True,True}
> {2, 3, 4, 5, 6} > {6, 5, 4, 3, 2}
> will something like:
> #1 > #2 &, x, x1
> work?
>
> I would appreciate any suggestions,
> Ben
>
>

```

• Prev by Date: Re: Re: FullSimplify with Assumptions
• Next by Date: Re: logical indexing using more than one variable in a pure function
• Previous by thread: Re: logical indexing using more than one variable in a pure function
• Next by thread: Re: logical indexing using more than one variable in a pure function