Probably cleanest would be to make two methods, one for scalars, one for
arrays.  For the array one just loop.

This also works, but returns an array for scalar input (type inference
should work once wrapped in a function):

julia> x = 5
5

julia> [ xi>5 ? 0:1 for xi in x]
1-element Array{Any,1}:
 1

julia> x = 1:10
1:10

julia> [ xi>5 ? 0:blah for xi in x]
10-element Array{Any,1}:
 1
 1
 1
 1
 1
 0
 0
 0
 0
 0


On Wed, 2016-02-10 at 11:58, Ferran Mazzanti <[email protected]> wrote:
> Hi folks,
>
> probably a stupid question but can't find the answer, so please help if you
> can :)
> I would like to evaluate a if.. else.. statement on a whole array. Actually
> it's a bit more complicated, as I have a function that
> previously was
>
> function u2(x)
>     return 0.5*(u2_0(x)+u2_0(Lbox-x))-u2_0(Lbox/2)
> end;
>
> for some other defined function u2(x) and constant L_box. The thing is that
> I could directly evaluate that on a scalar x and on an array.
> Now I have to change it and check if x is smaller than Lbox/2, returning
> the same as above if it is, or 0 otherwise.
> I tried something of the form
>
> function u2(x)
>     return x.>Lbox/2 ? 0 : 0.5*(u2_0(x)+u2_0(Lbox-x))-u2_0(Lbox/2)
> end;
>
> but that complains when x is an array. What would be the easiest way to
> achieve this? It should work for both scalars and arrays...
>
> Best regards and thanks,
>
> Ferran.

Reply via email to