# Add a number to each negative element of a matrix

I have the next matrix (Dimensions: {178, 178, 3}):

{{-1.22,2.44,3.14},{1.22,0.54,0.01},{1.21,-0.14,-2.31},{0.21,1.24,-0.42},...,{1.24,-0.25,1.34},{3.14,-3.14,-2.89}}


I want to add some quantity to each negative number of the matrix. Is it possible do that with control strucuture in Mathematica? How can I do it? thnk!

• mat /. x_?Negative :> x + 5? – kglr Oct 15 '16 at 21:23
• – WReach Oct 15 '16 at 22:02

This operation is pretty easy to do in Matheamtica. Let mat be your matrix and val your value. The you simply do

mat/. {x_ /; Negative[x] :> x + val}


If you want me to explain it just ask.

• The problem with this is that it won't work if the elements are symbolic expressions rather than numbers. How could that be modified to make it work in that case as well? – usumdelphini Jan 10 '19 at 15:13

Say mat is your matrix and val is the number you wish to add to all the negative values:

mat - val Clip[Sign[mat], {-1, 0}]


Another similar method:

mat + val (1 - UnitStep[mat])

• Furthermore, if mat is a packed array, it will stay packed with this method. – Michael E2 Oct 16 '16 at 1:47
• You might give mat + Clip[mat, {0, 0}, {val, 0}] consideration, I'd imagine faster (at least on packed arrays)... – ciao Oct 16 '16 at 4:32
• Now I am curious. Has this solution any advatanges to a simple replace? E.g. far higher perfomance? – meneken17 Oct 16 '16 at 10:51