Some of this is in the InPlaceOps.jl package. --Tim
On Sunday, December 14, 2014 10:38:56 PM Christian Peel wrote: > I'm curious if it would be possible to do this in some way that uses > explicit operators. For example the following three functions: > > # make local variable J storing result which keeps input array J unaffected > function f1(J) > J = K*M > end > > # update the input J with result > function f2(J) > J @= K*M # Instead of J[:,:] = K*M > end > > # multiply K by M without allocating a new array > function f3(J) > J := K*M # Instead A_mul_B!(J,K,M) > end > > ...just curious > > On Sunday, December 14, 2014 6:35:39 PM UTC-8, Petr Krysl wrote: > > Ahhh. Now, that made sense (I did not know Julia actually had a function > > with capitals and underscores its name ;). > > > > Thanks. Much obliged. > > > > Petr > > > > On Sunday, December 14, 2014 6:01:04 PM UTC-8, Andreas Noack wrote: > >> The function K*M allocates a new array for the result, but if you write > >> J[:,:]=K*M then J is updated with the values from the new array. This > >> matter if e.g. J is input to a function > >> > >> function f1(J) > >> J = K*M > >> end > >> > >> function f2(J) > >> J[:,:] = K*M > >> end > >> > >> f1 will make a local variable J storing the result which will keep the > >> input array J unaffected whereas f2 will update the input J. However, > >> they > >> will both allocate a new array. > >> > >> If you want to avoid allocation, you'll have to use either > >> A_mul_B!(C,A,B) where C stores the result or BLAS.gemm!. > >> > >> 2014-12-14 20:12 GMT-05:00 Petr Krysl <[email protected]>: > >>> ??? > >>> > >>> Could I have that again please? I don't follow. > >>> > >>> In-place in my usage of the word here means that the result of the > >>> > >>> multiplication is immediately stored in the matrix J,, without a > >>> temporary > >>> being created and then assigned to J. > >>> > >>> Thanks, > >>> > >>> Petr > >>> > >>> On Sunday, December 14, 2014 5:00:40 PM UTC-8, John Myles White wrote: > >>>> Assigning in-place and creating temporaries are actually totally > >>>> orthogonal. > >>>> > >>>> One is concerned with mutating J. This is contrasted with writing, > >>>> > >>>> J = K * M > >>>> > >>>> The other is concerned with the way that K * M gets computed before any > >>>> assignment operation or mutation can occur. This is contrasted with > >>>> something like A_mul_B. > >>>> > >>>> -- John > >>>> > >>>> Sent from my iPhone > >>>> > >>>> > On Dec 14, 2014, at 7:48 PM, Petr Krysl <[email protected]> wrote: > >>>> > > >>>> > Hello everybody, > >>>> > > >>>> > I hope someone knows this: What is the use of writing > >>>> > > >>>> > J[:,:] = K*M > >>>> > > >>>> > where all of these quantities are matrices? I thought I'd seen > >>>> > >>>> somewhere that it was assigning to the matrix "in-place" instead of > >>>> creating a temporary. Is that so? > >>>> > >>>> > I couldn't find it in the documentation for 0.3. > >>>> > > >>>> > Thanks, > >>>> > > >>>> > Petr
