Discussion:
boolean indexing for subset reassignment
(too old to reply)
Alan
2014-04-20 08:48:09 UTC
Permalink
Two years ago this answer was given:
http://mathematica.stackexchange.com/questions/2821/does-mathematica-have-advanced-indexing

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?

Thanks,
Alan Isaac
Bill Rowe
2014-04-21 09:12:05 UTC
Permalink
Post by Alan
http://mathematica.stackexchange.com/questions/2821/does-mathematica
-have-advanced-indexing
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 built-in 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 ***@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
Alan
2014-04-25 04:44:47 UTC
Permalink
Thanks for taking a stab at this, but you have not described comparable functionality. Most importantly, you are not changing the list `b` in place.

Cheers,
Alan Isaac

Loading...