4,494
edits
(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...") |
(link to symbol page) |
||
(3 intermediate revisions by one other user not shown) | |||
Line 1: | Line 1: | ||
:''The symbol <source lang=apl inline>⊃</source> is more commonly used for [[First]] or [[Mix]].'' | :''The [[Right Shoe]] symbol <source lang=apl inline>⊃</source> is more commonly used for [[First]] or [[Mix]].'' | ||
{{Built-in|Raze|⊃}}, | {{Built-in|Raze|⊃}}, <source lang=j inline>;</source> in [[J]], or '''Join''' (<source inline>∾</source>) in [[BQN]], is a [[monadic function]] which combines [[element]] arrays of a [[nested]] [[vector]] along the first [[axis]] (in accordance with [[leading axis theory]]). Thus, the [[major cell]]s of the Raze of an array are the major cells of its element arrays: unlike [[Mix]], which removes a level of [[depth]] while keeping outer and inner axes separate, Raze merges the outer vector's axis with the first axis of each element. Raze is present in [[A+]], [[J]], and [[BQN]]. | ||
== Examples == | == Examples == | ||
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 is part of [[BQN]], but 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 == | ||
Line 34: | Line 42: | ||
* J [https://www.jsoftware.com/help/dictionary/d330.htm Dictionary], [https://code.jsoftware.com/wiki/Vocabulary/semi NuVoc] | * J [https://www.jsoftware.com/help/dictionary/d330.htm Dictionary], [https://code.jsoftware.com/wiki/Vocabulary/semi NuVoc] | ||
* [https://mlochbaum.github.io/BQN/doc/join.html BQN] | |||
{{APL built-ins}}[[Category:Primitive functions]] |