On Thursday, May 01, 2014 01:34:41 PM Stefan Karpinski wrote: > It occurs to me that now that we separate .+ from + it may make sense for x > .+= y to be allowed to mutate x. After all, you are saying that you expect > an array in some sense.
If that's safe, I'd love it. --Tim > > On May 1, 2014, at 1:25 PM, Patrick O'Leary <patrick.ole...@gmail.com> > > wrote: > > > > 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