Mathematica Stack Exchange is a question and answer site for users of Mathematica. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Say I have a matrix of:

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

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

share|improve this question
tmp3 /. (x_ ?Positive -> x - 1)? – b.gatessucks Nov 13 '12 at 15:14
tmp3 /. x_?Positive :> x - 1 or tmp3 - Boole[Positive[tmp3]] then? – J. M. 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
Sebastian, I notice you haven't yet accepted any answers to questions you have asked. You can help yourself, future users, and this site as a whole, by following the guidance in the faq: "As you see new answers to your question, vote up the helpful ones by clicking the upward pointing arrow to the left of the answer. ... When you have decided which answer is the most helpful to you, mark it as the accepted answer by clicking on the check box outline to the left of the answer." – whuber Nov 13 '12 at 18:48
Hi @whuber Thanks. – sebastian c. Nov 15 '12 at 0:12

You have lots of options. Among them Replace:

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

And numerically for the entire matrix:

tmp3 - Unitize[tmp3]
share|improve this answer

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

share|improve this answer
You probably want Abs@Sign@tmp3, which is the same as Unitize. – R. M. 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

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.