A longish discussion of pros, cons, and other things can be found in this 
issue:

https://github.com/JuliaLang/julia/issues/249

On Thursday, May 1, 2014 11:39:14 AM UTC-5, Dominique Orban wrote:
>
> I would have expected b .+= 5 to change b in place, but it doesn't seem to 
> be the case. Isn't it counter-intuitive that it would also make a copy?
>
> On Thursday, May 1, 2014 6:54:10 AM UTC-7, Freddy Chua wrote:
>>
>> do this
>>
>> b = [1:5]
>> f(x) = x + 5
>> map!(f, b)
>>
>> On Thursday, May 1, 2014 9:03:35 PM UTC+8, Kevin Squire wrote:
>>>
>>> b[:] = b .+ 5
>>>
>>> has the behavior that you want. However, it  creates a copy, does the 
>>> addition, then copies the result back into b. 
>>>
>>> So, looping (aka devectorizing) would generally be faster. For simple 
>>> expressions like these, though, the Devectorize.jl package should allow you 
>>> to write 
>>>
>>> @devec b[:] = b .+ 5
>>>
>>> It then rewrites the expression as a loop. It isn't able to recognize 
>>> some expressions, though (especially complex ones), so YMMV. 
>>>
>>> (Actually, it may not work with ".+", since that is a relatively new 
>>> change in the language. If you check and it doesn't, try submitting a 
>>> github issue, or just report back here.)
>>>
>>> Cheers!  Kevin 
>>>
>>> On Thursday, May 1, 2014, Kaj Wiik <kaj....@gmail.com> wrote:
>>>
>>>> OK, thanks, makes sense. But how to change the original instance, is 
>>>> looping the only way?
>>>>
>>>> On Thursday, May 1, 2014 3:12:51 PM UTC+3, Freddy Chua wrote:
>>>>
>>>> b = b .+ 5 
>>>>
>>>> creates a new instance of an array, so the original array pointed to by 
>>>> "b" is not changed at all.
>>>>
>>>>
>>>>
>>>> On Thursday, May 1, 2014 7:39:14 PM UTC+8, Kaj Wiik wrote:
>>>>
>>>> As a new user I was surprised that even if you change the value of 
>>>> function arguments (inside the function) the changes are not always 
>>>> visible 
>>>> outside but in some cases they are.
>>>>
>>>> Here's an example:
>>>>
>>>> function vappu!(a,b)
>>>>        a[3]=100
>>>>        b = b .+ 5
>>>>        (a,b)
>>>> end
>>>>
>>>> c = [1:5]
>>>> d = [1:5]
>>>>
>>>> vappu!(c,d)
>>>> ([1,2,100,4,5],[6,7,8,9,10])
>>>>
>>>> c
>>>> 5-element Array{Int64,1}:
>>>>    1
>>>>    2
>>>>  100
>>>>    4
>>>>    5
>>>> d
>>>> 5-element Array{Int64,1}:
>>>>  1
>>>>  2
>>>>  3
>>>>  4
>>>>  5
>>>>
>>>>

Reply via email to