Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

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: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
2  
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

2 Answers 2

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:

tmp3-Sign[tmp3]
share|improve this answer
    
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

Your Answer

 
discard

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.