Thanks Mauro...
using two methods was the first thing I thought, but I strongly dislike the
idea because I'd have to maintain two different functions
to do the same, which doubles the possibility of introducing bugs. I like
the idea of keeping the main function simple and unique,
so if I change something the changes apply to all calculations in the same
way.
Best regards,
Ferran.
On Wednesday, February 10, 2016 at 12:11:00 PM UTC+1, Mauro wrote:
>
> 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]
> <javascript:>> 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.
>