Recently I was playing with something where I had two M by N
arrays, and I wanted a sort of product with shape M by N by M.
What I wanted was tantamount to
(1 3;2) |: A */ B
or, nicer,
1|: A *"1/ B
But it occurred to me that the problem had the look of an
inner product that didn't go all the way:
A f/ . * |: B
would give a result with shape M by M (the N-length axes
would first merge, then disappear with the reduction).
But the left function of a J inner product doesn't have
to be a reduction. So if I had a left function that did
nothing.... The hook
] . * |:
perverse though it looked, gave the correct result.
It was also a trifle faster for the smallish arrays I
tried, and since I could as well have made one of the
arrays N by M anyway, I could drop the transpose and
just have
A ] . * B
which is nicer than
1|: A *"1/ B
I suppose I had never really internalized the point about
the difference between APL and J inner products.
NM
--
Nollaig MacKenzie
http://www.yorku.ca/nollaig
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm