logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

PDL::CCS::Ufunc - Ufuncs for compressed storage sparse PDLs

Acknowledgements

       Perl by Larry Wall.

       PDL by Karl Glazebrook, Tuomas J. Lukka, Christian Soeller, and others.

Author

       Bryan Jurish <moocow@cpan.org>

   CopyrightPolicy
       Copyright (C) 2007-2024, Bryan Jurish. All rights reserved.

       This  package  is free software, and entirely without warranty.  You may redistribute it and/or modify it
       under the same terms as Perl itself.

Functions

ccs_accum_prod
         Signature: (
           indx ixIn(Ndims,NnzIn);
                nzvalsIn(NnzIn);
                missing();
           indx N();
           indx [o]ixOut(Ndims,NnzOut);
              [o]nzvalsOut(NnzOut);
           indx [o]nOut();
           )

       Accumulated product over values $nzvalsIn() associated with non-missing vector-valued keys $ixIn().  On
       return, $ixOut() holds the unique non-"missing" values of $ixIn(), $nzvalsOut() holds the associated
       values, and $nOut() stores the number of unique non-missing values computed.

       If $N() is specified and greater than zero, then the quantity:

        $missing ** ($N - (rlevec($ixIn))[0])

       is multiplied into $nzvalsOut: this is probably What You Want if you are computing the product over a
       virtual dimension in a sparse index-encoded PDL (see PDL::CCS::Nd for a wrapper class).

       Returned PDLs are implicitly sliced such that NnzOut==$nOut().

       In scalar context, returns only $nzvalsOut().

       ccs_accum_prod processes bad values.  It will set the bad-value flag of all output ndarrays if the flag
       is set for any of the input ndarrays.

   ccs_accum_dprod
         Signature: (
           indx ixIn(Ndims,NnzIn);
                nzvalsIn(NnzIn);
                missing();
           indx N();
           indx [o]ixOut(Ndims,NnzOut);
           double [o]nzvalsOut(NnzOut);
           indx [o]nOut();
           )

       Accumulated double-precision product over values $nzvalsIn() associated with non-missing vector-valued
       keys $ixIn().  On return, $ixOut() holds the unique non-"missing" values of $ixIn(), $nzvalsOut() holds
       the associated values, and $nOut() stores the number of unique non-missing values computed.

       If $N() is specified and greater than zero, then the quantity:

        $missing ** ($N - (rlevec($ixIn))[0])

       is multiplied into $nzvalsOut: this is probably What You Want if you are computing the product over a
       virtual dimension in a sparse index-encoded PDL (see PDL::CCS::Nd for a wrapper class).

       Returned PDLs are implicitly sliced such that NnzOut==$nOut().

       In scalar context, returns only $nzvalsOut().

       ccs_accum_dprod processes bad values.  It will set the bad-value flag of all output ndarrays if the flag
       is set for any of the input ndarrays.

   ccs_accum_sum
         Signature: (
           indx ixIn(Ndims,NnzIn);
                nzvalsIn(NnzIn);
                missing();
           indx N();
           indx [o]ixOut(Ndims,NnzOut);
              [o]nzvalsOut(NnzOut);
           indx [o]nOut();
           )

       Accumulated sum over values $nzvalsIn() associated with non-missing vector-valued keys $ixIn().  On
       return, $ixOut() holds the unique non-"missing" values of $ixIn(), $nzvalsOut() holds the associated
       values, and $nOut() stores the number of unique non-missing values computed.

       If $N() is specified and greater than zero, then the quantity:

        $missing * ($N - (rlevec($ixIn))[0])

       is added to $nzvalsOut: this is probably What You Want if you are summing over a virtual dimension in a
       sparse index-encoded PDL (see PDL::CCS::Nd for a wrapper class).

       Returned PDLs are implicitly sliced such that NnzOut==$nOut().

       In scalar context, returns only $nzvalsOut().

       ccs_accum_sum processes bad values.  It will set the bad-value flag of all output ndarrays if the flag is
       set for any of the input ndarrays.

   ccs_accum_dsum
         Signature: (
           indx ixIn(Ndims,NnzIn);
                nzvalsIn(NnzIn);
                missing();
           indx N();
           indx [o]ixOut(Ndims,NnzOut);
           double [o]nzvalsOut(NnzOut);
           indx [o]nOut();
           )

       Accumulated double-precision sum over values $nzvalsIn() associated with non-missing vector-valued keys
       $ixIn().  On return, $ixOut() holds the unique non-"missing" values of $ixIn(), $nzvalsOut() holds the
       associated values, and $nOut() stores the number of unique non-missing values computed.

       If $N() is specified and greater than zero, then the quantity:

        $missing * ($N - (rlevec($ixIn))[0])

       is added to $nzvalsOut: this is probably What You Want if you are summing over a virtual dimension in a
       sparse index-encoded PDL (see PDL::CCS::Nd for a wrapper class).

       Returned PDLs are implicitly sliced such that NnzOut==$nOut().

       In scalar context, returns only $nzvalsOut().

       ccs_accum_dsum processes bad values.  It will set the bad-value flag of all output ndarrays if the flag
       is set for any of the input ndarrays.

   ccs_accum_or
         Signature: (
           indx ixIn(Ndims,NnzIn);
                nzvalsIn(NnzIn);
                missing();
           indx N();
           indx [o]ixOut(Ndims,NnzOut);
              [o]nzvalsOut(NnzOut);
           indx [o]nOut();
           )

       Accumulated logical "or" over values $nzvalsIn() associated with non-missing vector-valued keys $ixIn().
       On return, $ixOut() holds the unique non-"missing" values of $ixIn(), $nzvalsOut() holds the associated
       values, and $nOut() stores the number of unique non-missing values computed.

       If $N() is specified and greater than zero, $missing() is logically (or)ed into each result value at each
       output index with a run length of less than $N() in $ixIn().  This is probably What You Want.

       Returned PDLs are implicitly sliced such that NnzOut==$nOut().

       In scalar context, returns only $nzvalsOut().

       ccs_accum_or processes bad values.  It will set the bad-value flag of all output ndarrays if the flag is
       set for any of the input ndarrays.

   ccs_accum_and
         Signature: (
           indx ixIn(Ndims,NnzIn);
                nzvalsIn(NnzIn);
                missing();
           indx N();
           indx [o]ixOut(Ndims,NnzOut);
              [o]nzvalsOut(NnzOut);
           indx [o]nOut();
           )

       Accumulated logical "and" over values $nzvalsIn() associated with non-missing vector-valued keys $ixIn().
       On return, $ixOut() holds the unique non-"missing" values of $ixIn(), $nzvalsOut() holds the associated
       values, and $nOut() stores the number of unique non-missing values computed.

       If $N() is specified and greater than zero, $missing() is logically (and)ed into each result value at
       each output index with a run length of less than $N() in $ixIn().  This is probably What You Want.

       Returned PDLs are implicitly sliced such that NnzOut==$nOut().

       In scalar context, returns only $nzvalsOut().

       ccs_accum_and processes bad values.  It will set the bad-value flag of all output ndarrays if the flag is
       set for any of the input ndarrays.

   ccs_accum_bor
         Signature: (
           indx ixIn(Ndims,NnzIn);
                nzvalsIn(NnzIn);
                missing();
           indx N();
           indx [o]ixOut(Ndims,NnzOut);
              [o]nzvalsOut(NnzOut);
           indx [o]nOut();
           )

       Accumulated bitwise "or" over values $nzvalsIn() associated with non-missing vector-valued keys $ixIn().
       On return, $ixOut() holds the unique non-"missing" values of $ixIn(), $nzvalsOut() holds the associated
       values, and $nOut() stores the number of unique non-missing values computed.

       If $N() is specified and greater than zero, $missing() is bitwise (or)ed into each result value at each
       output index with a run length of less than $N() in $ixIn().  This is probably What You Want.

       Returned PDLs are implicitly sliced such that NnzOut==$nOut().

       In scalar context, returns only $nzvalsOut().

       ccs_accum_bor processes bad values.  It will set the bad-value flag of all output ndarrays if the flag is
       set for any of the input ndarrays.

   ccs_accum_band
         Signature: (
           indx ixIn(Ndims,NnzIn);
                nzvalsIn(NnzIn);
                missing();
           indx N();
           indx [o]ixOut(Ndims,NnzOut);
              [o]nzvalsOut(NnzOut);
           indx [o]nOut();
           )

       Accumulated bitwise "and" over values $nzvalsIn() associated with non-missing vector-valued keys $ixIn().
       On return, $ixOut() holds the unique non-"missing" values of $ixIn(), $nzvalsOut() holds the associated
       values, and $nOut() stores the number of unique non-missing values computed.

       If $N() is specified and greater than zero, $missing() is bitwise (and)ed into each result value at each
       output index with a run length of less than $N() in $ixIn().  This is probably What You Want.

       Returned PDLs are implicitly sliced such that NnzOut==$nOut().

       In scalar context, returns only $nzvalsOut().

       ccs_accum_band processes bad values.  It will set the bad-value flag of all output ndarrays if the flag
       is set for any of the input ndarrays.

   ccs_accum_maximum
         Signature: (
           indx ixIn(Ndims,NnzIn);
                nzvalsIn(NnzIn);
                missing();
           indx N();
           indx [o]ixOut(Ndims,NnzOut);
              [o]nzvalsOut(NnzOut);
           indx [o]nOut();
           )

       Accumulated maximum over values $nzvalsIn() associated with non-missing vector-valued keys $ixIn().  On
       return, $ixOut() holds the unique non-"missing" values of $ixIn(), $nzvalsOut() holds the associated
       values, and $nOut() stores the number of unique non-missing values computed.

       If $N() is specified and greater than zero, and if $missing() is greater than any listed value for a
       vector key with a run-length of less than $N(), then $missing() is used as the output value for that key.
       This is probably What You Want.

       Returned PDLs are implicitly sliced such that NnzOut==$nOut().

       In scalar context, returns only $nzvalsOut().

       ccs_accum_maximum processes bad values.  It will set the bad-value flag of all output ndarrays if the
       flag is set for any of the input ndarrays.

   ccs_accum_minimum
         Signature: (
           indx ixIn(Ndims,NnzIn);
                nzvalsIn(NnzIn);
                missing();
           indx N();
           indx [o]ixOut(Ndims,NnzOut);
              [o]nzvalsOut(NnzOut);
           indx [o]nOut();
           )

       Accumulated minimum over values $nzvalsIn() associated with non-missing vector-valued keys $ixIn().  On
       return, $ixOut() holds the unique non-"missing" values of $ixIn(), $nzvalsOut() holds the associated
       values, and $nOut() stores the number of unique non-missing values computed.

       If $N() is specified and greater than zero, and if $missing() is less than any listed value for a vector
       key with a run-length of less than $N(), then $missing() is used as the output value for that key.  This
       is probably What You Want.

       Returned PDLs are implicitly sliced such that NnzOut==$nOut().

       In scalar context, returns only $nzvalsOut().

       ccs_accum_minimum processes bad values.  It will set the bad-value flag of all output ndarrays if the
       flag is set for any of the input ndarrays.

   ccs_accum_maximum_nz_ind
         Signature: (
           indx ixIn(Ndims,NnzIn);
                nzvalsIn(NnzIn);
                missing();
           indx N();
           indx [o]ixOut(Ndims,NnzOut);
           indx [o]nzvalsOut(NnzOut);
           indx [o]nOut();
           )

       Accumulated maximum_nz_ind over values $nzvalsIn() associated with non-missing vector-valued keys
       $ixIn().  On return, $ixOut() holds the unique non-"missing" values of $ixIn(), $nzvalsOut() holds the
       associated values, and $nOut() stores the number of unique non-missing values computed.

       Output indices index $nzvalsIn, -1 indicates that the missing value is maximal.

       Returned PDLs are implicitly sliced such that NnzOut==$nOut().

       In scalar context, returns only $nzvalsOut().

       ccs_accum_maximum_nz_ind processes bad values.  It will set the bad-value flag of all output ndarrays if
       the flag is set for any of the input ndarrays.

   ccs_accum_minimum_nz_ind
         Signature: (
           indx ixIn(Ndims,NnzIn);
                nzvalsIn(NnzIn);
                missing();
           indx N();
           indx [o]ixOut(Ndims,NnzOut);
           indx [o]nzvalsOut(NnzOut);
           indx [o]nOut();
           )

       Accumulated minimum_nz_ind over values $nzvalsIn() associated with non-missing vector-valued keys
       $ixIn().  On return, $ixOut() holds the unique non-"missing" values of $ixIn(), $nzvalsOut() holds the
       associated values, and $nOut() stores the number of unique non-missing values computed.

       Output indices index $nzvalsIn, -1 indicates that the missing value is minimal.

       Returned PDLs are implicitly sliced such that NnzOut==$nOut().

       In scalar context, returns only $nzvalsOut().

       ccs_accum_minimum_nz_ind processes bad values.  It will set the bad-value flag of all output ndarrays if
       the flag is set for any of the input ndarrays.

   ccs_accum_nbad
         Signature: (
           indx ixIn(Ndims,NnzIn);
                nzvalsIn(NnzIn);
                missing();
           indx N();
           indx [o]ixOut(Ndims,NnzOut);
           indx [o]nzvalsOut(NnzOut);
           indx [o]nOut();
           )

       Accumulated number of bad values over values $nzvalsIn() associated with non-missing vector-valued keys
       $ixIn().  On return, $ixOut() holds the unique non-"missing" values of $ixIn(), $nzvalsOut() holds the
       associated values, and $nOut() stores the number of unique non-missing values computed.

       Should handle missing values appropriately.

       Returned PDLs are implicitly sliced such that NnzOut==$nOut().

       In scalar context, returns only $nzvalsOut().

       ccs_accum_nbad processes bad values.  It will set the bad-value flag of all output ndarrays if the flag
       is set for any of the input ndarrays.

   ccs_accum_ngood
         Signature: (
           indx ixIn(Ndims,NnzIn);
                nzvalsIn(NnzIn);
                missing();
           indx N();
           indx [o]ixOut(Ndims,NnzOut);
           indx [o]nzvalsOut(NnzOut);
           indx [o]nOut();
           )

       Accumulated number of good values over values $nzvalsIn() associated with non-missing vector-valued keys
       $ixIn().  On return, $ixOut() holds the unique non-"missing" values of $ixIn(), $nzvalsOut() holds the
       associated values, and $nOut() stores the number of unique non-missing values computed.

       Should handle missing values appropriately.

       Returned PDLs are implicitly sliced such that NnzOut==$nOut().

       In scalar context, returns only $nzvalsOut().

       ccs_accum_ngood processes bad values.  It will set the bad-value flag of all output ndarrays if the flag
       is set for any of the input ndarrays.

   ccs_accum_nnz
         Signature: (
           indx ixIn(Ndims,NnzIn);
                nzvalsIn(NnzIn);
                missing();
           indx N();
           indx [o]ixOut(Ndims,NnzOut);
           indx [o]nzvalsOut(NnzOut);
           indx [o]nOut();
           )

       Accumulated number of non-zero values over values $nzvalsIn() associated with non-missing vector-valued
       keys $ixIn().  On return, $ixOut() holds the unique non-"missing" values of $ixIn(), $nzvalsOut() holds
       the associated values, and $nOut() stores the number of unique non-missing values computed.

       Should handle missing values appropriately.

       Returned PDLs are implicitly sliced such that NnzOut==$nOut().

       In scalar context, returns only $nzvalsOut().

       ccs_accum_nnz processes bad values.  It will set the bad-value flag of all output ndarrays if the flag is
       set for any of the input ndarrays.

   ccs_accum_average
         Signature: (
           indx ixIn(Ndims,NnzIn);
                nzvalsIn(NnzIn);
                missing();
           indx N();
           indx [o]ixOut(Ndims,NnzOut);
           float+ [o]nzvalsOut(NnzOut);
           indx [o]nOut();
           )

       Accumulated average over values $nzvalsIn() associated with non-missing vector-valued keys $ixIn().  On
       return, $ixOut() holds the unique non-"missing" values of $ixIn(), $nzvalsOut() holds the associated
       values, and $nOut() stores the number of unique non-missing values computed.

       If $N() is specified and greater than zero, then the quantity:

        $missing * ($N - (rlevec($ixIn))[0]) / $N

       is added to $nzvalsOut: this is probably What You Want if you are averaging over a virtual dimension in a
       sparse index-encoded PDL (see PDL::CCS::Nd for a wrapper class).

       Returned PDLs are implicitly sliced such that NnzOut==$nOut().

       In scalar context, returns only $nzvalsOut().

       ccs_accum_average processes bad values.  It will set the bad-value flag of all output ndarrays if the
       flag is set for any of the input ndarrays.

Known Bugs

       Probably many.

Name

       PDL::CCS::Ufunc - Ufuncs for compressed storage sparse PDLs

See Also

perl(1), PDL(3perl)

perl v5.40.0                                       2025-01-04                                         Ufunc(3pm)

Synopsis

        use PDL;
        use PDL::CCS::Ufunc;

        ##---------------------------------------------------------------------
        ## ... stuff happens

Todo / Not Yet Implemented

       extrema indices
           maximum_ind, minimum_ind: not quite compatible...

       statistical aggregates
           daverage, medover, oddmedover, pctover, ...

       cumulative functions
           cumusumover, cumuprodover, ...

       other stuff
           zcover, intover, minmaximum

See Also