
Re: boolean indexing for subset reassignment
Posted:
Apr 21, 2014 5:12 AM


On 4/20/14 at 4:47 AM, alan.isaac@gmail.com (Alan) wrote:
>Two years ago this answer was given: >http://mathematica.stackexchange.com/questions/2821/doesmathematica >haveadvancedindexing
>Essentially, the answer was that Mathematica did not provide direct >support for this feature (unlike say NumPy, R, etc.). Work arounds >were suggested.
>Has the situation changed?
No, there is no builtin function that does just what was described. But this is a very simple thing to do in Mathematica.
generate an array with some values greater than 15:
In[3]:= a = RandomInteger[{1, 20}, {4, 3}]
Out[3]= {{12, 6, 17}, {4, 17, 19}, {14, 10, 7}, {8, 2, 15}}
generate the array to change:
In[4]:= b = RandomReal[1, {4, 3}]
Out[4]= {{0.6304544421081466, 0.10672523812862322, 0.4822372961689563}, {0.06301096415944252, 0.975158725702236, 0.052202491707093346}, {0.06883790695346681, 0.7890506831190796, 0.8367965617051536}, {0.8641752609839166, 0.6371442124093818, 0.9217402690944818}}
then
In[5]:= m = b Unitize@Clip[a, {1, 15}, {0, 0}]
Out[5]= {{0.6304544421081466, 0.10672523812862322, 0.}, {0.06301096415944252, 0., 0.}, {0.06883790695346681, 0.7890506831190796, 0.8367965617051536}, {0.8641752609839166, 0.6371442124093818, 0.9217402690944818}}
is array b changed to have a 0 wherever the corresponding element of a is greater than 15

