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

Is it possible for the Piecewise function to process a vector comparison? For example, my input vector is


I would like to define a function that gives me x^2 if x<3.5, and x+3 otherwise. i.e. I would like my output to be {0,1,4,9,7}. Here I define a function:

myfunc[x_] := Piecewise[{{x^2,x<3.5},{x+3,x>=3.5}}]

which obviously does not work. Is there a way to let Mathematica know that I want to compare x with 3.5 elementwise and apply that particular value to the segment as appropriate?

I'm used to R programming where I can use the ifelse function for this job, but I'm relatively new to Mathematica and don't know if this is possible.


share|improve this question
Related question:… – Leonid Shifrin Apr 1 '12 at 11:15
Thanks for your solutions; all work perfectly. As a R user I don't feel particularly comfortable with the way mathematica handles vector manipulation. Due to the nature of this problem I couldn't think of any keywords to search for a solution effectively. – David L Apr 1 '12 at 16:53
Note that solutions using Listable and Map lose the speed advantage offered by vectorized operations in Mathematica. If speed is important, you may wish to use things like UnitStep and Unitize instead. – Leonid Shifrin Apr 1 '12 at 16:57
up vote 9 down vote accepted

I'm not in front of a computer now, but I think you should be able to set your function to Listable and use it as-is:

SetAttributes[myfunc, Listable]
share|improve this answer
I am in front of a computer. It works. – yohbs Apr 1 '12 at 12:48
@yohbs: Thanks! – Cassini Apr 1 '12 at 18:41

There is nothing wrong with your function. You can Map it to a list as


you get your desired output.

Alternatively, you can use your myfunc to define a new function that accepts lists:

 mynewfunc[y_List] := Map[myfunc, y]




 {0, 1, 4, 9, 7}
share|improve this answer

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.