# Matrix conditional operation

Say I have a matrix of:

tmp1 = 5;
tmp2 = 5;
tmp3 = RandomChoice[{0, 1, 2, 3, 4, 5}, {tmp1, tmp2}];
MatrixForm[tmp3]


How to do a conditional operation of elements - 1 if non-zero, else do nothing, as in the attached: . Maybe using Positive?

• tmp3 /. (x_ ?Positive -> x - 1)? – b.gates.you.know.what Nov 13 '12 at 15:14
• tmp3 /. x_?Positive :> x - 1 or tmp3 - Boole[Positive[tmp3]] then? – J. M. will be back soon Nov 13 '12 at 15:17
• Hi @b.gatessucks and J.M thanks you are very helpful. – sebastian c. Nov 13 '12 at 15:20
• Hi @whuber Thanks. – sebastian c. Nov 15 '12 at 0:12

You have lots of options. Among them Replace:

Replace[tmp3, x : Except :> x - 1, {2}]


And numerically for the entire matrix:

tmp3 - Unitize[tmp3]


Another possibility is to use Sign[]. To make each positive element of the matrix decrease by one:

tmp3-Sign[tmp3]

• You probably want Abs@Sign@tmp3, which is the same as Unitize. – rm -rf Nov 13 '12 at 16:12
• OPs matrix is all positive integers, so it's the same. But it is not clear what the desired behavior would be if you had negative integers: using Sign[ ] they would all head towards zero; using Unitize the negatives would keep decreasing. – bill s Nov 13 '12 at 16:24