Thanks, that's an educational conversation; started 3 years ago and continues to the present.
On Monday, December 15, 2014 11:28:30 AM UTC-8, Andreas Noack wrote: > > See the discussion here > > https://github.com/JuliaLang/julia/issues/249 > > > > 2014-12-15 14:14 GMT-05:00 Christian Peel <[email protected] <javascript:> > >: >> >> 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 >>> >>>
