I think it's quite reasonable to solve your "general" problem by
applying a transpose, and maybe filling in some length-1 axes, before an
n-dimensional Kronecker product. There's a reason BQN still has a
Reorder Axes primitive! The Kronecker product alone is interesting
because it can easily be seen as a transpose even though it's something
that was developed outside of this context.

To be clear, my opposition to J's flat array model (I think it's almost
always worse than BQN's based model) is different from my stance on flat
arrays. BQN can also represent and optimize these, although there's no
name for the category; they'd be called arrays of numbers or arrays of
characters. And of course there can be huge advantages to working with
them, but I think it's madness to use this as grounds to dismiss a
solution that's much shorter and easier to read. And frankly, more in
keeping with other array principles: that blind reshape ($,) on the
transposed array is something I try hard to avoid.

Marshall

On Wed, Jun 15, 2022 at 03:18:03PM -0700, Elijah Stone wrote:
> 1. Refer to henry baker, 'On the Permutations of a Vector Obtainable through
> the Restructure and Transpose Operators of APL'
> (https://plover.com/~mjd/misc/hbaker-archive/APLPerms.ps.Z).  I don't think
> it is a _particularly_ good paper, but it is alright, and it is relevant.
> 
> 2. Your join is interesting, but it is not fully general, and it is
> decidedly contrary to the principles of flat design (which I know you are
> opposed to to...).  A general solution would not require boxes or nests, and
> would allow for the joining of arbitrary axes to each other.  I was going to
> produce a model, but am too out of it at the moment to work out the details;
> sorry.
> 
>  -E
> 
> On Wed, 15 Jun 2022, Marshall Lochbaum wrote:
> 
> > It's an interesting transpose, but BQN has a much more elegant solution:
> > with multidimensional Join, the product of arrays is just ∾a×<b, or ∾×⟜<
> > as a tacit function.
> > 
> > Code: 
> > https://mlochbaum.github.io/BQN/try.html#code=YSDihpAgMTArMuKAvzPipYrihpU2CmIg4oaQIDPigL804qWK4oaVMTIK4oi+YcOXPGI=
> > 
> > Docs: https://mlochbaum.github.io/BQN/doc/join.html#join
> > 
> > J's raze is just like Join for list arguments, but that implicit ravel
> > means it's stuck doing 1-dimensional joins forever. I said in the
> > previous podcast that I really didn't like J's implicit ravel and this
> > is why (and I said I missed its multidimensional i. for example code
> > only... also relevant).
> > 
> > Even so, it's nice to know the connection between Join and Transpose.
> > Thanks for the link—I've seen it but it didn't occur to me in this
> > context.
> > 
> > Marshall
> > 
> > On Wed, Jun 15, 2022 at 09:00:13PM +0200, Jan-Pieter Jacobs wrote:
> > > Hi,
> > > 
> > > I'd like to thank the entire Arraycast crew for this excellent podcast, 
> > > I'm
> > > always looking forward to the next episode. I find it super informative,
> > > with a healthy dose of humour. Great job; please continue ;).
> > > 
> > > Since you didn't seem to find many applications of dyadic transpose, I'd
> > > like to point out the Kronecker product page on the J wiki:
> > > https://code.jsoftware.com/wiki/Essays/Kronecker_Product
> > > 
> > > Conceptually, it multiplies each element of a left array with the entirity
> > > of the right array.
> > > One of the implementations (kp) uses dyadic transpose to zip together the
> > > axes of the *"0 _ in alternating order.
> > > 
> > > A while back, I coded up a generalised version for arbitrarily shaped
> > > arrays (that is any but not scalar. see the "kpnd" verb, on the same 
> > > page),
> > > using the same approach. I hope this extension makes sense, because I 
> > > could
> > > not find any implementation or description of such generalisation. The 
> > > "as"
> > > verb calculates the required axis shuffle needed, to be later reshaped 
> > > into
> > > the final shape by the "cs" verb.
> > > 
> > > As an aside (I didn't put it on the Kronecker product page since it's not
> > > exactly a Kronecker product), in recent J (903 or up), one can define a
> > > generic Kronecker-dyad forming adverb as the following tacit modifier:
> > > 
> > > kd =: (("0 _) |:~ as) (]: ($,)~ cs)
> > > 
> > > such that kpnd is equivalent to * kd. This way one could do Kronecker sums
> > > (+kp) or Kronecker versions of whatever rank 0 dyad you'd like.
> > > 
> > > Now to find an application for these verbs... Always nice to have a pretty
> > > solution waiting to meet its corresponding problem :p.
> > > 
> > > Best regards,
> > > Jan-Pieter
> > > 
> > > On Sat, 11 Jun 2022, 18:21 'robert therriault' via Programming, <
> > > programm...@jsoftware.com> wrote:
> > > 
> > > > Hi everyone,
> > > >
> > > > In this episode we explore monadic and dyadic transpose and the ways it 
> > > > is
> > > > interpreted in APL, BQN and J.
> > > >
> > > > Host: Conor Hoekstra Panel: Marshall Lochbaum, Adám Brudzewsky, Stephen
> > > > Taylor and Bob Therriault.
> > > >
> > > > https://www.arraycast.com/episodes/episode28-rank-and-leading-axis-gbbpe
> > > >
> > > > Cheers, bob
> > > > ----------------------------------------------------------------------
> > > > For information about J forums see http://www.jsoftware.com/forums.htm
> > > >
> > > ----------------------------------------------------------------------
> > > For information about J forums see http://www.jsoftware.com/forums.htm
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to