Thanks Tim, InPlaceOps is very good to know about. I guess that it's hard to use simple mathematical notation (operators) to express all the subtleties and breadth of even such a simple operation as multiplying two matrices and saving the result. On can have temporary matrices created or not, a new or existing output matrix used, and more.
On Monday, December 15, 2014 2:50:24 AM UTC-8, Tim Holy wrote: > > 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 > >
