You can try the @vectorize_1arg macro. Just define u2 as you did, then
@vectorize_1arg Number u2.

Or, if you don't want to use the macro, you can try a for loop.  Example:

function u2(x::AbstractArray)
  out = similar(x)
  for i in eachindex(x)
    out[i] = u2(x[i])
  end
  return out
end


On Wednesday, February 10, 2016 at 7:15:30 AM UTC-5, Ferran Mazzanti wrote:
>
> 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 <ferran....@gmail.com> 
>> 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