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 <[email protected] <javascript:>> > 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 >> >>
