Also Raghu’s write up was about taking the wikipedia looping pseudo-code for matrix multiplication and thinking in array languages on how to implement. I thought the solution in K was rather elegant and wondered what matrix multiplication from scratch would look like in J using Raghu’s K implementation as a template.
It turned out to be a lesson in Rank. This is something I should know more about but Rank always makes my brain hurt when I have to get involved with it. > On Jul 19, 2022, at 3:55 PM, Devon McCormick <devon...@gmail.com> wrote: > > I missed that. I think this is an elegant way that avoids explicit rank. > > On Tue, Jul 19, 2022 at 2:13 PM Hauke Rehr <hauke.r...@uni-jena.de> wrote: > >> Tom did, in the very post starting this thread: >> >> (1+i. 4 3) +/ . * 1+i. 3 4 >> 38 44 50 56 >> 83 98 113 128 >> 128 152 176 200 >> 173 206 239 272 >> >> Am 19.07.22 um 20:10 schrieb Devon McCormick: >>> I'm puzzled why no one has used the basic matrix multiplication >> expression >>> in J. >>> >>> matmul3 >>> ([: +/ *)"1 _ >>> mat1=. <.0.5+10*<:+:1000 1000?@$0 >>> mat0=. <.0.5+10*<:+:1000 1000?@$0 >>> (10) 6!:2 'mat0 matmul3 mat1' >>> 0.737084 >>> (10) 6!:2 'mat0 +/ . * mat1' >>> 0.0499271 >>> (mat0 matmul3 mat1) -: mat0 +/ . * mat1 >>> 1 >>> >>> >>> >>> On Tue, Jul 19, 2022 at 12:49 PM Thomas McGuire <tmcguir...@gmail.com> >>> wrote: >>> >>>> My late night laziness and I got bitten by the 13 : definition doesn’t >>>> always work >>>> correctly with both x and y variables. Which I just assumed was working >>>> correctly. >>>> >>>> Now when I fix the definition of matmul3 so it works correctly (as >> Elijah >>>> pointed out) the variable >>>> representation does not incur a worrisome time penalty: >>>> >>>> (1+i. 4 3) ([: +/ *)"1 _ (1+i. 3 4) >>>> 38 44 50 56 >>>> 83 98 113 128 >>>> 128 152 176 200 >>>> 173 206 239 272 >>>> matmul3 =: ([: +/ *)"1 _ >>>> (1+i. 4 3) matmul3 (1+i. 3 4) >>>> 38 44 50 56 >>>> 83 98 113 128 >>>> 128 152 176 200 >>>> 173 206 239 272 >>>> >>>> 10 timex 'bmat1 ([: +/ *)"1 _ bmat2’ >>>> 0.0464441 >>>> 10 timex 'bmat1 matmul3 bmat2’ >>>> 0.0471224 >>>> >>>> (bmat1 matmul3 bmat2) -: bmat1 ([: +/ *)"1 _ bmat2 >>>> 1 >>>> >>>> >>>> Thanks for showing me the error >>>> >>>>> On Jul 19, 2022, at 5:15 AM, Elijah Stone <elro...@elronnd.net> wrote: >>>>> >>>>> You are measuring two completely different things. >>>>> >>>>> 10 timex'bmat1 ([: +/ *)"1 _ bmat2' >>>>> 0.0482293 >>>>> 10 timex'bmat1 ([: +/ *"1 _) bmat2' >>>>> 0.115583 >>>>> (bmat1 ([: +/ *)"1 _ bmat2) -: (bmat1 ([: +/ *"1 _) bmat2) >>>>> 0 >>>>> ---------------------------------------------------------------------- >>>>> For information about J forums see http://www.jsoftware.com/forums.htm >>>> >>>> ---------------------------------------------------------------------- >>>> For information about J forums see http://www.jsoftware.com/forums.htm >>>> >>> >>> >> >> -- >> ---------------------- >> mail written using NEO >> neo-layout.org >> ---------------------------------------------------------------------- >> For information about J forums see http://www.jsoftware.com/forums.htm >> > > > -- > > Devon McCormick, CFA > > Quantitative Consultant > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm