Re: put some elements to zero
- To: mathgroup at smc.vnet.net
- Subject: [mg101484] Re: put some elements to zero
- From: Bill Rowe <readnews at sbcglobal.net>
- Date: Wed, 8 Jul 2009 07:12:43 -0400 (EDT)
On 7/7/09 at 7:46 AM, L.Balzano at gmail.com (Luigi B) wrote:
>I have a matrix with only two columns and many rows. For instance
>{xi,yi}. For those xi<x0, I would like to set yi=0. I can only think
>of a very inefficient loop...
One way would be to use pattern matching as follows:
=46irst generate a sample data set
In[1]:= data = RandomInteger[10, {5, 2}]
Out[1]= {{7, 0}, {6, 8}, {4, 5}, {5, 5}, {8, 8}}
Then modify it using the code below
In[2]:= data /. {a_, b_} :> If[a < 5, {a, 0}, {a, b}]
Out[2]= {{7, 0}, {6, 8}, {4, 0}, {5, 5}, {8, 8}}
As you can see the pair {4,5} got changed to {4,0} and all other
pairs were left as is.
I used RuleDelayed and a specific test for the first element
being less than 5 since I think this makes it very clear what
the code will do. But the pattern could be written to only match
pairs with the first element < 5 as follows:
In[3]:= data /. {a_?(# < 5 &), _} -> {a, 0}
Out[3]= {{7, 0}, {6, 8}, {4, 0}, {5, 5}, {8, 8}}