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::Utils - Low-level utilities 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.

Debugging Utilities

ccs_dump_which
         Signature: (indx which(Ndims,Nnz); SV *HANDLE; char *fmt; char *fsep; char *rsep)

       Print a text dump of an index PDL to the filehandle "HANDLE", which default to "STDUT".  $fmt is a
       printf() format to use for output, which defaults to "%td".  $fsep and $rsep are field-and record
       separators, which default to a single space and $/, respectively.

       ccs_dump_which does not process bad values.  It will set the bad-value flag of all output ndarrays if the
       flag is set for any of the input ndarrays.

Decoding Utilities

ccs_decode_pointer
         Signature: (indx ptr(Nplus1); indx proj(Nproj); indx [o]projix(NnzProj); indx [o]nzix(NnzProj); PDL_Indx nnzProj)

       General CCS decoding utility.

       Project indices $proj() from a compressed storage "pointer" vector $ptr().  If unspecified, $proj()
       defaults to:

        sequence($ptr->dim(0) - 1)

       ccs_decode_pointer does not process bad values.  It will set the bad-value flag of all output ndarrays if
       the flag is set for any of the input ndarrays.

Encoding Utilities

ccs_encode_pointers
         Signature: (indx ix(Nnz); indx N(); indx [o]ptr(Nplus1); indx [o]ixix(Nnz))

       General CCS encoding utility.

       Get a compressed storage "pointer" vector $ptr for a dimension of size $N with non-missing values at
       indices $ix.  Also returns a vector $ixix() which may be used as an index for $ix() to align its elements
       with $ptr() along the compressed dimension.

       The induced vector $ix->index($ixix) is guaranteed to be stably sorted along dimension $N():

        \forall $i,$j with 1 <= $i < $j <= $Nnz :

         $ix->index($ixix)->at($i) < $ix->index($ixix)->at($j)   ##-- primary sort on $ix()
        or
         $ixix->at($i)             < $ixix->at($j)               ##-- ... stable

       ccs_encode_pointers does not process bad values.  It will set the bad-value flag of all output ndarrays
       if the flag is set for any of the input ndarrays.

Functions

Indexing Utilities

ccs_xindex1d
         Signature: (indx which(Ndims,Nnz); indx a(Na); indx [o]nzia(NnzA); indx [o]nnza(); PDL_Indx sizeNnzA)

       Compute indices $nzai() along dimension "Nnz" of $which() whose initial values $which(0,$nzai) match some
       element of $a().  Appropriate for indexing a sparse encoded PDL with non-missing entries at $which()
       along the 0th dimension, a la dice_axis(0,$a).  $which((0),) and $a() must be both sorted in ascending
       order.

       In list context, returns a list ($nzai,$nnza), where $nnza() is the number of indices found, and $nzai
       are those "Nnz" indices.  In scalar context, trims the output vector $nzai() to $nnza() elements.

       ccs_xindex1d does not process 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_xindex2d
         Signature: (indx which(Ndims,Nnz); indx a(Na); indx b(Nb); indx [o]ab(Nab); indx [o]nab())

       Compute indices along dimension "NNz" of $which() corresponding to any combination of values in the
       Cartesian product of $a() and $b().  Appropriate for indexing a 2d sparse encoded PDL with non-missing
       entries at $which() via the ND-index piddle $a->slice("*1,")->cat($b)->clump(2)->xchg(0,1), i.e. all
       pairs $ai,$bi with $ai in $a() and $bi in $b().  $a() and $b() values must be be sorted in ascending
       order

       In list context, returns a list ($ab,$nab), where $nab() is the number of indices found, and $ab are
       those "Nnz" indices.  In scalar context, trims the output vector $ab() to $nab() elements.

       ccs_xindex2d does not process 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::Utils - Low-level utilities for compressed storage sparse PDLs

Non-Missing Value Counts

nnz
         Signature: (a(N); indx [o]nnz())

       Get number of non-zero values in a PDL $a(); For 1d PDLs, should be equivalent to:

        $nnz = nelem(which($a!=0));

       For k>1 dimensional PDLs, projects via number of nonzero elements to N-1 dimensions by computing the
       number of nonzero elements along the the 1st dimension.

       The output PDL $nnz() never contains BAD values.

   nnza
         Signature: (a(N); eps(); indx [o]nnz())

       Like nnz() using tolerance constant $eps().  For 1d PDLs, should be equivalent to:

        $nnz = nelem(which(!$a->approx(0,$eps)));

       The output PDL $nnz() never contains BAD values.

See Also

perl(1), PDL(3perl)

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

Synopsis

        use PDL;
        use PDL::CCS::Utils;

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

See Also