# HG changeset patch # User Jaroslav Hajek # Date 1259309421 -3600 # Node ID ead4f9c82a9abf4b3150a0097fef8d408d7071fa # Parent cac3b4e5035b79bf58b7c891dcb49b831b511db6 implement Array::nnz diff -r cac3b4e5035b -r ead4f9c82a9a liboctave/Array.cc --- a/liboctave/Array.cc Thu Nov 26 21:31:35 2009 +0100 +++ b/liboctave/Array.cc Fri Nov 27 09:10:21 2009 +0100 @@ -2425,6 +2425,20 @@ } template +octave_idx_type +Array::nnz (void) const +{ + const T *src = data (); + octave_idx_type nel = nelem (), retval = 0; + const T zero = T (); + for (octave_idx_type i = 0; i < nel; i++) + if (src[i] != zero) + retval++; + + return retval; +} + +template Array Array::find (octave_idx_type n, bool backward) const { @@ -2693,6 +2707,10 @@ template <> Array \ Array::lookupb (const Array&, sortmode) const \ { return Array (); } \ + \ +template <> octave_idx_type \ +Array::nnz (void) const\ +{ return 0; } \ template <> Array \ Array::find (octave_idx_type, bool) const\ { return Array (); } \ diff -r cac3b4e5035b -r ead4f9c82a9a liboctave/Array.h --- a/liboctave/Array.h Thu Nov 26 21:31:35 2009 +0100 +++ b/liboctave/Array.h Fri Nov 27 09:10:21 2009 +0100 @@ -641,6 +641,9 @@ // This looks up only exact matches, returning true/false if match. Array lookupb (const Array& values, sortmode mode = UNSORTED) const; + // Count nonzero elements. + octave_idx_type nnz (void) const; + // Find indices of (at most n) nonzero elements. If n is specified, backward // specifies search from backward. Array find (octave_idx_type n = -1, bool backward = false) const; diff -r cac3b4e5035b -r ead4f9c82a9a liboctave/ChangeLog --- a/liboctave/ChangeLog Thu Nov 26 21:31:35 2009 +0100 +++ b/liboctave/ChangeLog Fri Nov 27 09:10:21 2009 +0100 @@ -1,3 +1,11 @@ +2009-11-27 Jaroslav Hajek + + * Array.cc (Array::nnz): New method. + * Array.h: Declare it. + * MArray.h (MArray::nnz): Remove. + * MArrayN.h (MArrayN::nnz): Remove. + * boolNDArray.h (boolNDArray::nnz): Remove. + 2009-11-25 Jaroslav Hajek * dbleCHOL.cc (CHOL::init): Output LAPACK's info. Resize matrix if diff -r cac3b4e5035b -r ead4f9c82a9a liboctave/MArray.h --- a/liboctave/MArray.h Thu Nov 26 21:31:35 2009 +0100 +++ b/liboctave/MArray.h Fri Nov 27 09:10:21 2009 +0100 @@ -73,23 +73,6 @@ MArray transpose (void) const { return Array::transpose (); } MArray hermitian (T (*fcn) (const T&) = 0) const { return Array::hermitian (fcn); } - octave_idx_type nnz (void) const - { - octave_idx_type retval = 0; - - const T *d = this->data (); - - octave_idx_type nel = this->numel (); - - for (octave_idx_type i = 0; i < nel; i++) - { - if (d[i] != T ()) - retval++; - } - - return retval; - } - double norm (double p) const; float norm (float p) const; diff -r cac3b4e5035b -r ead4f9c82a9a liboctave/MArrayN.h --- a/liboctave/MArrayN.h Thu Nov 26 21:31:35 2009 +0100 +++ b/liboctave/MArrayN.h Fri Nov 27 09:10:21 2009 +0100 @@ -70,23 +70,6 @@ return *this; } - octave_idx_type nnz (void) const - { - octave_idx_type retval = 0; - - const T *d = this->data (); - - octave_idx_type nel = this->numel (); - - for (octave_idx_type i = 0; i < nel; i++) - { - if (d[i] != T ()) - retval++; - } - - return retval; - } - MArrayN reshape (const dim_vector& new_dims) const { return Array::reshape (new_dims); } diff -r cac3b4e5035b -r ead4f9c82a9a liboctave/boolNDArray.h --- a/liboctave/boolNDArray.h Thu Nov 26 21:31:35 2009 +0100 +++ b/liboctave/boolNDArray.h Fri Nov 27 09:10:21 2009 +0100 @@ -101,23 +101,6 @@ // bool all_elements_are_real (void) const; // bool all_integers (double& max_val, double& min_val) const; - octave_idx_type nnz (void) const - { - octave_idx_type retval = 0; - - const bool *d = this->data (); - - octave_idx_type nel = this->numel (); - - for (octave_idx_type i = 0; i < nel; i++) - { - if (d[i]) - retval++; - } - - return retval; - } - boolNDArray diag (octave_idx_type k = 0) const; private: