Raze: Difference between revisions

Jump to navigation Jump to search
1,589 bytes added ,  15:20, 18 December 2019
High-rank extension
(Created page with ":''The symbol <source lang=apl inline>⊃</source> is more commonly used for First or Mix.'' {{Built-in|Raze|⊃}}, or <source lang=j inline>;</source> in J, is a...")
 
(High-rank extension)
Line 28: Line 28:


Raze is the [[inverse]] of [[Partition]] and [[Partitioned Enclose]] on vectors: partitioning, then razing, a vector gives that vector back. It is also an inverse to partition functions which partition major cells along the first axis, although few partition functions do this.
Raze is the [[inverse]] of [[Partition]] and [[Partitioned Enclose]] on vectors: partitioning, then razing, a vector gives that vector back. It is also an inverse to partition functions which partition major cells along the first axis, although few partition functions do this.
== High-rank extension ==
Raze can be extended to an argument array of rank greater than 1, allowing it to merge [[wikipedia:Block matrix|block matrices]] or higher-dimensional structures. This extension has not been implemented in any APL, and would not be backwards-compatible in J, since J's Raze implicitly ravels its argument.
The axes of a high-rank argument should be paired with those of its element arrays, starting at the first axis (much like [[prefix agreement]]). The elements can be merged without adding fills when the length of an element along a particular axis depends only on its position along that axis in the outer array. That is, in <source lang=apl inline>⊃X</source>, <source lang=apl inline>⍴¨X</source> must match <source lang=apl inline>⊃∘.,/S</source>, where S is a vector containing <source lang=apl inline>≢⍴X</source> vectors followed by any number of scalars. In this case, the shape of <source lang=apl inline>⊃X</source> is <source lang=apl inline>+/¨S</source>. The result can be computed by performing a modified 1-dimensional Raze several times. The modified Raze should maintain some number of leading inner element axes. With the [[Rank operator]] (<source lang=apl inline>⍤</source>) we might write <source lang=apl inline>⍪⍤(1-≢⍴X)/X</source> for a single step in the process, thus reducing along the last axis and catenating along the same axis.
If the element arrays of <source lang=apl inline>X</source> do not satisfy the shape requirements, they could be padded with [[fill]]s to force this requirement to hold.


== External links ==
== External links ==

Navigation menu