thanks guys for all of these :)

On Saturday, 7 June 2014 14:25:08 UTC-4, David Einstein wrote:
>
> It makes sense now.  The ternary operator only evaluates one branch, while 
> a function would force both to be evaluated.  So the answer to the original 
> question should be
>
> inside_disc(x,y,radius) = ifelse((sqrt(x.^2 .+ y.^2) .< radius), 1 , 0)
>
> This should be faster than the map version. 
>
> Amazingly (at least to me), the ifelse version is only 10% faster than the 
> map version when processing million item vectors of floats, and generates 
> just a slight amount more garbage. 
>
> On Saturday, June 7, 2014 1:05:20 PM UTC-4, Stefan Karpinski wrote:
>>
>> That's because ifelse is just a function, not an operator with special 
>> syntax. The ternary operator is just a one-line form of the if-else and 
>> requires the condition to be a single boolean value. It is a genuine 
>> control flow construct, not a function.
>>
>>
>> On Fri, Jun 6, 2014 at 11:54 PM, David Einstein <[email protected]> wrote:
>>
>>> It looks like you have vectorized ifelse, the operator version just 
>>> doesn't work.  This code is on line 379 of operators.jl
>>>
>>> function ifelse(c::AbstractArray{Bool}, x, y)
>>>     reshape([ifelse(ci, x, y) for ci in c], size(c))
>>> end
>>>
>>> If I do
>>>
>>> ifelse((1:10 .< 5) , 1 , 0)
>>>
>>> then everything works.
>>>
>>> however
>>>
>>> (1:10 .< 5) ? 1 : 0
>>>
>>> does not.  I'm not sure why.
>>>
>>> Also it appears that ifelse is not automatically imported like the rest 
>>> of the operators from base are.
>>>
>>>
>>> On Friday, June 6, 2014 10:58:10 PM UTC-4, Stefan Karpinski wrote:
>>>
>>>> We should probably vectorize the ifelse function.
>>>>
>>>> On Jun 6, 2014, at 10:51 PM, David Einstein <[email protected]> wrote:
>>>>
>>>> sqrt(x.^2 .+ y.^2) .< radius 
>>>> is a vector of booleans
>>>>
>>>> ?:
>>>> expects a boolean
>>>>
>>>> you probably want something like:
>>>>
>>>> inside_disc(x,y,radius) = map(good -> good ? 1 : 0, 
>>>> sqrt(x.^2+y.^2).<radius)
>>>>
>>>>
>>>>
>>>> On Friday, June 6, 2014 10:18:36 PM UTC-4, Zahirul ALAM wrote:
>>>>>
>>>>> When I pass two arrays the function returns:
>>>>>
>>>>> type: non-boolean (BitArray{1}) used in boolean context while loading 
>>>>> In[10], in expression starting on line 1
>>>>>
>>>>>
>>>>> I have modified the function to address the element wise operation as 
>>>>> follows:
>>>>>
>>>>>
>>>>> inside_disc(x,y,radius) = sqrt(x.^2 .+ y.^2) .< radius ? 1 : 0
>>>>>
>>>>> seems to me that the error is being thrown by .< operation. What am I 
>>>>> missing?
>>>>>
>>>>>
>>>>> On Friday, 6 June 2014 20:34:22 UTC-4, Miguel Bazdresch wrote:
>>>>>>
>>>>>> I'm not sure I understand the question. Do you mean something like 
>>>>>> this?
>>>>>>
>>>>>> inside_disc(x,y,radius) = sqrt(x^2+y^2)<radius ? 1 : 0
>>>>>>
>>>>>> -- mb
>>>>>>
>>>>>>
>>>>>> On Fri, Jun 6, 2014 at 8:28 PM, Zahirul ALAM <[email protected]> 
>>>>>> wrote:
>>>>>>
>>>>>>> I guess one can do a for loop. But how do I vectorize the code?
>>>>>>>
>>>>>>>
>>>>>>> On Friday, 6 June 2014 20:27:46 UTC-4, Zahirul ALAM wrote:
>>>>>>>>
>>>>>>>> How would one implement a step function like behaviour in julia? In 
>>>>>>>> mathematica one can write the following to create a circle with value 
>>>>>>>> of 1 
>>>>>>>> within the radius and 0 outside
>>>>>>>>
>>>>>>>> UnitBox[Sqrt[X^2 + Y^2]*0.5/radius];
>>>>>>>>
>>>>>>>> X and Y are the coordinates. 
>>>>>>>>
>>>>>>>
>>>>>>
>>

Reply via email to