Vocabulary/dollar
>> << Down to: Dyad Back to: Vocabulary Thru to: Dictionary
$ y Shape Of
Rank Infinity -- operates on x and y as a whole -- WHY IS THIS IMPORTANT?
The shape of the noun y .
The shape of the noun y is always a list, even if that list contains just 1 atom (i.e. y itself is a list).
Contrast this behavior with Tally (# y).
The shape of a given noun is...
- empty (i.0) for an atom (eg the single letter 'a')
- the number of atoms for a list (eg a list of numbers)
- 0 for the empty list
- (3 2) for a 3-by-2 table.
Common Uses
1. Find the shape of a noun
$ 'abc' NB. A 3-atom list 3 $ 'a' NB. An atom - no axes $ '' NB. An empty list - 1 axis, 0 elements 0 $ i. 2 3 NB. A 2x3 table 2 3 ] empty =: 0 # i. 3 4 NB. Create a table, then delete all the rows $ empty NB. The rows are still 4 long, even though there are 0 of them! 0 4
2. Find the rank of a noun using # $ y
# $ 'a' NB. Rank of an atom is 0 0 # $ 'abc' NB. Rank of a list is ALWAYS 1 1 # $ '' NB. ... even an empty list 1 # $ i. 3 2 NB. Rank of a table is 2 2
Related Primitives
Tally (# y)
More Information
1. Shape Of ($ y) gives the shape of y (always a list), while Tally (# y) gives the number of items of y (always an atom).
($ ; #) y=: '' +-+-+ |0|0| +-+-+ ($ ; #) y=: 'a' ++-+ ||1| ++-+ ($ ; #) y=: ,'a' +-+-+ |1|1| +-+-+ ($ ; #) y=: 'abc' +-+-+ |3|3| +-+-+
Use These Combinations
Combinations using $ y that have exceptionally good performance include:
What it does Type;
Precisions;
RanksSyntax Variants;
Restrictions
Benefits;
Bug Warnings
Calculate rank of a noun #@$ y
([: # $) y@: in place of @ Calculate number of atoms in a noun #@, y
*/@$ y
([: # ,) y
([: */ $) y@: in place of @ Is the noun empty? (0 e. $) y Is the noun nonempty? *@#@, y Does the noun have items? *@# y
x $ y
x ($,) yShape
Rank 1 _ -- operates on lists of x and the entirety of y -- WHY IS THIS IMPORTANT?
Creates an array whose shape depends on x and the shape of y. $ uses items of y; ($,) uses atoms of y;
2 3 $ 'ab' aba bab
Common Uses
1. Create a noun with a given shape and items
2 3 $ 5 5 5 5 5 5 5
2. Reshape a noun to a different shape x.
In general, it's wise to use ($,) rather than $ .
If y is an atom or a list, it's ok to use $ instead of ($,) .
]i. 2 3 0 1 2 3 4 5 2 3 4 ($,) i. 2 3 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5
More Information
The items of the result of x $ y are the items of y, taken cyclically (i.e. when y is exhausted, the first item of y is reused).
1. If y is an atom or a list, the shape of the result is x.
$ y=: 'abcdefghijkl' 12 ] z=: 2 2 $ y ab cd $ z 2 2
2. If y has rank > 1, the shape of the result is (x,}.$y); i.e. the result is an array of items of y whose frame is x.
To be pedantic, the shape of the result is always (x,}.$y) no matter the rank of y.
i. 2 3 NB. A 2x3 array 0 1 2 3 4 5 2 3 $ i. 2 3 NB. A 2x3 array of 3-atom lists, i. e. shape 2 3 3 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 $ 2 3 $ i. 2 3 NB. the shape of the above 2 3 3
3. x ($,) y always produces a result whose shape is x.
4. If a fill atom f is specified (by using $!.f), cyclic reuse of y is suppressed: after y is exhausted further items of the result are filled with the fill atom.
5 $ 'a' aaaaa 5 $!.'b' 'a' NB. With fill atom, y is used only once abbbb
5. If the fill atom is an empty list, an atom of the same type as y is used.
5 $!.'' 6 NB. integer type, use 0 for fill 6 0 0 0 0 5 $!.'' <'a' NB. boxed type, use a: for fill +-+++++ |a||||| +-+++++
6. x may be empty. The result will be consistent with the rules given above.
'' $ 5 6 7 NB. Shape of result is empty, i. e. result is an atom 5 '' $ i. 2 3 NB. Shape of result is 3 0 1 2
'' ($,) y is a good way to get the first atom of y, as long as y is not empty.
7. If exactly one atom of x is infinity (_), the atom is replaced by whatever length is required to use all items of y exactly once.
_ 2 $ i. 6 0 1 2 3 4 5 2 _ $ i. 6 0 1 2 3 4 5 2 _ $ i. 7 NB. Error, y cannot be used exactly |domain error, executing dyad $
8. An additional use of !. with a verb argument allows you to change the value used to replace _.
2 _ $!.<. i. 7 NB. Round to number of full items 0 1 2 3 4 5 2 _ $!.>. i. 7 NB. Round up to include partial item 0 1 2 3 4 5 6 0 2 _ $!.99!.>. i. 7 NB. Fill and _-calculation can be combined 0 1 2 3 4 5 6 99
Details
1. If y is empty, the result must also be empty, i. e. its shape must contain a 0 .
The reason is that the values of the result must come from y, and if y has no values, what could the result possibly be?
5 $ '' |length error | 5 $''
2. Exception to the previous rule: if a fill atom is specified (even an empty one), x need not contain a 0 when y is empty, because the fill atom can be used for the values.
5 $!.6 '' 6 6 6 6 6
'' ($!.f ,) y will get the first atom of y even if y is empty.
Use These Combinations
Combinations using x $ y that have exceptionally good performance include:
What it does Type;
Precisions;
RanksSyntax Variants;
Restrictions
Benefits;
Bug Warnings
Reshape to exactly x x ($ ,) y Supported as a primitive by ($ ,)"n Arrays of random numbers x ?@$ y
x([: ? $)y
?. in place of ?
@: in place of @
# in place of $does not create x $ y