correcting a typo/bug written earlier

(3 2 2 ,: 4) shape i.16

should be

(3 2 2 ,: ,4) shape i.16

Another way to specify/return ragged shapes would be in boxed form.  I would 
not have made the above typo if the input form for ragged shapes were boxes.  So

(3 2 2;4) as a shape does not need to care about padding, and then some other 
future meaning for table shapes could be looked into.






On Thursday, March 3, 2022, 11:50:25 a.m. EST, 'Pascal Jasmin' via Programming 
<programm...@jsoftware.com> wrote: 





I'm ok with the 0s, but another way to have 2 shapes (referring to 2 arrays) of 
different sizes ie. one of 3 2 2 the other shape 4, would be that the "shape of 
the shapes" is a "by 1 table":

3
1

so 

(3 ,:1) $ 3 2 2 4 would be the shape of i.  (3 ,:1) $ 3 2 2 4  or ((3 ,:1) $ 3 
2 2 4) $ i.16

I'm ok with this as a formal definition for arrays of arrays, but I would 
definitely create a verb named shape to ease with typing and even 
processing/reshaping such that

((3 ,:1) $ 3 2 2 4) $ i.16

would be equivalent to

(3 2 2 ,: 4) shape i.16

ie. in table shapes, trailing 0s (fills) are equivalent to axes not being 
present.  I don't think this loses very much in expressibility, though I 
understand that it creates an extra computation step to properly understand a 
"shape item" with trailing 0s.


On Thursday, March 3, 2022, 11:01:57 a.m. EST, Henry Rich 
<henryhr...@gmail.com> wrote: 





I like this, except for the trailing-0 bit. I would say having data with 
trailing 0 shape is 'common' rather than 'ultra-rare'.

Henry Rich

On 3/3/2022 10:15 AM, 'Pascal Jasmin' via Programming wrote:
> I don't have a good grasp of order, but a different practical interpretation 
> of non-list shapes:
>
> 1. You mentioned distinguishing atoms from lists of 1 element.  J already 
> manages this well, and making an atomic shape result would not be of any 
> help, IMO.
>
> 2. A table shape could be a code for ragged arrays, or arrays of arrays.  The 
> following shape:
>
> 3 2 2
> 4 0 0
>
> Would be 2 arrays, the first is shape 3 2 2, and the 2nd is shape 4.  
> Trailing 0s would be fills. This precludes the ultra rare need of needing an 
> "embedded" shape 4 0 or shape 4 0 0 in your data.
>
> A list of 3 strings/lists with individual lengths of 2 3 4 would have the 
> shape:
>
> 2
> 3
> 4
>
> If there is an extention of the meaning of shape, I'd prefer it be in this 
> direction rather than ultra high dimensional math that hurts my head.
>
>
> On Thursday, March 3, 2022, 05:13:27 a.m. EST, Elijah Stone 
> <elro...@elronnd.net> wrote:
>
>
>
>
>
> A little thought exercise I embarked upon.
> Probably not very clearly expressed, and certainly of no practical use,
> but I think there are some interesting ideas:
>
> Why must the result of $y always be a vector?  What would happen if we let
> it be a higher-ranked array?  What would that _mean_?
>
> Well, say that 2 3 4-:$y.  That means that y is a mapping from arrays x
> that have the same shape as 2 3 4 (and whose elements are natural and
> bounded by 2 3 4).  In other words, if (x -:&$ 2 3 4) *. -. 0 e. x<2 3 4
> then (<x){y is well-defined as an atom.  (I am intentially ignoring the
> possibility of sentences such as ((<1 1){y)  ((<,1){y)  ((<1){y)  and so
> on; consider these sentences ill-formed for the time being.)
> Generalising: if (x -:&$ $y) *. -. 0 e. x<$y then (<x){y is well-defined
> as an atom.
>
> But this sentence makes no restrictions whatsoever on the rank of x!  So
> it would seem that we've discovered a way to make a y whose shape is an
> array of any rank.  But we must be careful.  Really, all we've constructed
> is a strange entity y--call it an array-as-we-do-not-know-it--and, on
> arrays-as-we-do-not-know-them, we have defined that: $y is well-defined,
> and evaluates to an array-as-we-know-it.  x{y is well-defined for some
> subset of arrays-as-we-know-them x, and evaluates to an
> atom-as-we-know-it.
>
> I will call this strange creature a 4th-order array.  And all
> arrays-as-we-know-them are 3rd-order (this includes scalars, vectors, and
> higher-rank arrays).  A 4th-order array has a shape which is a 3rd-order
> array, and maps from 3rd-order arrays to atoms.  This suggests the
> existence of lower-order arrays, and higher-order ones.
>
> Following the same logic, then, a 3rd-order array would map 2nd-order
> arrays to atoms, and its shape would be a 2nd-order array.  But--for
> 3rd-order y, the x in (<x){y for 3rd-order y is currently also a 3rd-order
> array, and $y is currently also 3rd-order.
>
> Or is it, really?  We've already established that $y must always be a
> vector for ordinary, familiar, 3rd-order y; and that x must be too for
> (<x){y.  (A vector is a 3rd-order array y which satisfies (,1)-:$$y.)  I
> propose that there is another strange creature, which is a 2nd-order
> array, or _list_.  This is no less strange than 4th-order array, and j
> does not have them.  A list is very similar to a vector, though, in that
> it is an ordered sequence of atoms.  And there is an obvious 1:1 mapping
> between vectors and lists.  Therefore, when you write (<x){y, and x is a
> vector, it is first _converted_ to the corresponding list, and that list
> is used to index y.  Similarly, when you write $y, and y is a third-order
> array, its shape is actually a list; that list is _converted_ to the
> corresponding vector before being returned.
>
> Then, fairly straightforwardly, we can define the 1st-order array, or
> _atom_, another strange creature.  Atoms are used to index lists, and the
> shape of a list is an atom. And every atom (1st-order array) also has a
> counterpart in familiar 3rd-order land, as a _scalar_.  (A scalar is a
> 3rd-order array y which satisfies ((,0)$0)-:$y.)
>
> The obvious difference between a vector and a list is that, if we want
> element 5 of y, and y is a list, we write (<5){y; but if y is a vector, we
> must write (<,5){y.  But to make the distinction that way misses the
> point, I think.  A 2nd-order array is a particular sort of array which is
> restricted in that it can only contain unidirectional sequences of atoms.
> A vector is of a different sort of array, which is less restricted, but it
> happens to belong to a particular subset which maps to lists.  (The same
> relationship holds for scalars and atoms.)
>
> Now, imagine a hypothetical version of j which could represent arrays of
> orders other than 3.  It is difficult to talk about such a j, because--for
> instance--there might be an atom value 3 and a scalar value 3, and these
> would be distinct; if I simply write '3', it is ambiguous which is
> referred to.  So I will err on the side of verbosity rather than
> ambiguity.
>
> One thing immediately becomes clear: the result of $y in such a j should
> be the _actual_ shape of y; that is, it should have order one lower than
> y.  What, then is the shape of an atom?  It might be an error, but I
> should rather make it the _unit_.  The unit is the singular value which is
> an order-0 array.  The unit is also its own shape.  Then, we can also say
> that an order n array is one which requires n applications of $ to reach a
> fixed point.  Personally, I think a fixed point of a unit is nicer than a
> fixed point of ,1 (which is what we currently have, with all results
> squashed into 3rd-order arrays), but this is a point of style.
>
> Another nice consistency that results is that the idiom $$y evaluates to
> an atom when y is a 3rd-order array.  That is, it gives you the rank of y,
> rather than a 1-element vector containing the rank.
>
> Another observation: this provides a way to relate j to k; the difference
> between them is one of degree, not kind.  In k, everything is a list or a
> scalar; that is, all values have order 1 or order 2.  In j, all values
> have order 3.  (There is another difference, which is that k has nests
> where j has boxes, but this is orthogonal.)
>
> We can think of 3rd-order arrays as functions; for instance, an array of
> rank 4 is like a function of 4 parameters.  If we index such an array
> using a list of length 4, that is like applying the corresponding
> function, where each element of the list is associated with the
> corresponding argument.  By convention, these functions are curried.
> Even if y has rank 4, it is legal in j to write (<1 2 0){y, even though 1
> 2 0 has length 3.  (Previously, I said I was considering this illegal;
> now, I am defining it again.)  This works by currying y; producing an
> array which has its first 3 arguments fixed (to 1, 2, and 0,
> respectively), requiring only 1 more; because it only requires 1 more
> argument, we say it has rank 1.  This works well enough for 3rd-order
> arrays, but what about higher-order ones?  When is something a valid
> 'partial index', and what are the 'first arguments'?
>
> A better definition comes from , .  If p is a valid index into y (as
> defined in the 3rd paragraph), then (<p){y applies the indexing procedure
> as usual.  Otherwise, it is the array for which (<q){(<p){y is equivalent
> to (<p,q){y.  (This only holds if there is q for which, given p and y, p,q
> is a valid index into y; otherwise it is an index error.)  This is
> adequate to describe existing indexing behaviour for 3rd-order arrays .
> And it works without a hitch for 4th-order arrays.  For higher-order
> arrays, it is simply necessary to extend , to work on higher-order arrays;
> given such an extension, that, too will work without a hitch (and probably
> (?) give sensible results).
>
> I think the foregoing definition goes most of the way towards explaining
> why we may index arrays using scalars; it is more than a convenience
> feature, and the scalar is not simply converted to a vector.  (Going the
> rest of the way would require a complete and general model of , .)
>
> Now, some questions:
>
> 1. It there any practical value to this scheme?  In some respects, an
> array with a non-list shape just seems like an array with a list shape,
> and bells on.  But I am a low-dimensional creature, and perhaps if I had
> more use for very high-dimensional arrays, I would find it useful to
> structure my axes (and then structure the structure of my axes, and so on,
> leading to arrays of ever higher orders).
>
> The simplest 4th-order array which is 'interesting' has shape 2 2$2; that
> is, it corresponds roughly to a 4-dimensional array; that is rare enough.
> The simplest 5th-order array which is 'interesting' has shape (2 2$2)$2,
> that is 16-dimensional-ish.  I generally have little use for arrays of
> such high dimension (4 is reasonable, 16 is quite unlikely), and have not
> found a linear organization stifling or problematic.
>
> The jump from the unit to the atom seems most significant, as it allows
> you to communicate any information at all; the unit carries no
> information.  Next in significance is the jump from atoms to lists, which
> permit the communication of inherently _structured_ information.  This is
> good enough for many applications (and k gets along just fine); moving to
> 3rd-order arrays simply increases the degree of structure available, which
> can be useful in some (ok, many) situations.  So it would not be
> surprising if the added benefit of moving to higher orders continued to
> peter out, such that 3 hit a good sweet spot.
>
> 2. Is there any theoretical value to this scheme, or anything interesting
> which can be described only using it?  I used it to explain a number of
> small inconsistencies, but that is marginal at best.
>
> Is there any existing mathematical precedent?  I know that what j calls
> arrays the literature calls tensors.  So I googled for 'higher-order
> tensors', but only found information on what we would call higher-_rank_
> arrays, not what I distinguished here as higher-_order_ arrays.  I also
> searched for non-cartesian coordinate systems, but could not find anything
> where the components of the coordinates were not sequential and flat.
>
> 3. Are the different orders of arrays qualitatively different?  E.G. a
> 3rd-order array can approximate both a 1st-order array (using a scalar)
> and a 2nd-order array (using a vector); but a 2nd-order array can not
> approximate a 1st-order array.  (This is why, to my understanding, a
> scalar is an array in j, but it is not a list in k.)  (On the other hand,
> 3rd-order arrays can not represent the unit.)  I think all higher-order
> arrays can approximate any 3rd-order array; but do they gain any new
> powers?
>
> 4. I called arrays of order 0, 1, and 2 units, atoms, and lists,
> respectively.  What should arrays of order 3 be called?  Perhaps 'spaces'?
> Is there a sensible name for 4th- or 5th-order arrays?
>
> Is the name 'shape' still sensible if extended to different orders?
>
> 5. How would the j primitives work if extended to work on arrays of order
> other than 3?  What are the rules of conformability?  Can you add an atom
> to a scalar?  A list to a matrix?  A list to a vector?  When can you
> catenate two 5th-order arrays?  How does rank work on 4th-order arrays?
>
> 6. Is there a good intuition for higher-order arrays?  I can more or less
> imagine what 4th-dimensional space is like (though I can't visualize it),
> but I have no idea what a 'space' of shape 2 2$y is like, even though it
> has the same number of 'degrees of freedom'.
>
> Is there a well-defined notion of distance defined in higher-order
> 'space'?  If so, is it still scalar?
>
>
> Thoughts?
>
>    -E
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm


-- 
This email has been checked for viruses by AVG.
https://www.avg.com



----------------------------------------------------------------------
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