cmp ← {cmp←1} ##.packN exp                  ⍝ Null packing.

Returns  a 3-vector of: shape; boolean vector indicating non-null items; and the
ravel  of  the original array with nulls removed. This compression is very quick
and  is  effective  for  simple arrays containing a large proportion of zeros or
blanks.

The  saving   comes  from the fact that each item in the boolean vector requires
only  a  single bit,  instead of from 8- to 64-bits in the original.  Of course,
packN-ing a _boolean_ array is always counter-productive.

Examples:

    string←'whistles        far     and wee'    ⍝ text string.

    packN string                                ⍝ format of packN'd string.
┌──┬─────────────────────────────────────────────────────────────┬─────────────────┐
│31│1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 0 1 1 1│whistlesfarandwee│
└──┴─────────────────────────────────────────────────────────────┴─────────────────┘

    size←{⎕size'⍵'}                             ⍝ show size.

    size string                                 ⍝ size of char vector.
48
    size packN string                           ⍝ packed: nett loss.
104
    size 1000⍴string                            ⍝ larger string.
1016
    size packN 1000⍴string                      ⍝ packed: nett gain.
760

    mat                                         ⍝ numeric matrix.
0    0 0 2.48 0 0 0 0    0 0 0    0
0    0 0 0    0 0 0 0    0 0 0    0
0    0 0 0    0 0 0 3.66 0 0 7.57 0
9.92 0 0 0    0 0 0 0    0 0 0    6.33

    packN mat                                   ⍝ format of packN'd matrix.
┌────┬───────────────────────────────────────────────────────────────────────────────────────────────┬────────────────────────┐
│4 12│0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1│2.48 3.66 7.57 9.92 6.33│
└────┴───────────────────────────────────────────────────────────────────────────────────────────────┴────────────────────────┘

    size mat                                    ⍝ original size.
404
    size packN mat                              ⍝ packed: nett gain.
128

See also: Data_compression

Back to: contents

Back to: Workspaces