# 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
Commented Oct 15, 2016 at 21:23
• Commented Oct 15, 2016 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? Commented Jan 10, 2019 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. Commented Oct 16, 2016 at 1:47
• You might give mat + Clip[mat, {0, 0}, {val, 0}] consideration, I'd imagine faster (at least on packed arrays)...
– ciao
Commented Oct 16, 2016 at 4:32
• Now I am curious. Has this solution any advatanges to a simple replace? E.g. far higher perfomance? Commented Oct 16, 2016 at 10:51