Mercurial > hg > octave-lyh
annotate scripts/sparse/spstats.m @ 7515:f3c00dc0912b
Eliminate the rest of the dispatched sparse functions
author | David Bateman <dbateman@free.fr> |
---|---|
date | Fri, 22 Feb 2008 15:50:51 +0100 |
parents | 3f29467c1667 |
children | eb63fbe60fab |
rev | line source |
---|---|
7017 | 1 ## Copyright (C) 2004, 2005, 2006, 2007 Paul Kienzle |
5164 | 2 ## |
7016 | 3 ## This file is part of Octave. |
4 ## | |
5 ## Octave is free software; you can redistribute it and/or modify it | |
6 ## under the terms of the GNU General Public License as published by | |
7 ## the Free Software Foundation; either version 3 of the License, or (at | |
8 ## your option) any later version. | |
9 ## | |
10 ## Octave is distributed in the hope that it will be useful, but | |
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 ## General Public License for more details. | |
14 ## | |
15 ## You should have received a copy of the GNU General Public License | |
16 ## along with Octave; see the file COPYING. If not, see | |
17 ## <http://www.gnu.org/licenses/>. | |
5164 | 18 |
19 ## -*- texinfo -*- | |
6547 | 20 ## @deftypefn {Function File} {[@var{count}, @var{mean}, @var{var}] =} spstats (@var{s}) |
21 ## @deftypefnx {Function File} {[@var{count}, @var{mean}, @var{var}] =} spstats (@var{s}, @var{j}) | |
5164 | 22 ## Return the stats for the non-zero elements of the sparse matrix @var{s}. |
23 ## @var{count} is the number of non-zeros in each column, @var{mean} | |
24 ## is the mean of the non-zeros in each column, and @var{var} is the | |
25 ## variance of the non-zeros in each column. | |
26 ## | |
5584 | 27 ## Called with two input arguments, if @var{s} is the data and @var{j} |
5164 | 28 ## is the bin number for the data, compute the stats for each bin. In |
29 ## this case, bins can contain data values of zero, whereas with | |
30 ## @code{spstats (@var{s})} the zeros may disappear. | |
31 ## @end deftypefn | |
32 | |
6498 | 33 function [count, mean, var] = spstats (S, j) |
34 | |
35 if (nargin < 1 || nargin > 2) | |
6046 | 36 print_usage (); |
5164 | 37 endif |
38 | |
6498 | 39 if (nargin == 1) |
40 [i, j, v] = find (S); | |
5164 | 41 else |
42 v = S; | |
43 i = 1:length (v); | |
44 S = sparse (i, j, v); | |
45 endif | |
5584 | 46 [n, m] = size (S); |
5164 | 47 |
7515
f3c00dc0912b
Eliminate the rest of the dispatched sparse functions
David Bateman <dbateman@free.fr>
parents:
7287
diff
changeset
|
48 count = sum (sparse (i, j, 1, n, m)); |
5164 | 49 if (nargout > 1) |
7515
f3c00dc0912b
Eliminate the rest of the dispatched sparse functions
David Bateman <dbateman@free.fr>
parents:
7287
diff
changeset
|
50 mean = sum (S) ./ count; |
7151 | 51 endif |
5164 | 52 if (nargout > 2) |
5775 | 53 ## FIXME Variance with count = 0 or 1? |
5164 | 54 diff = S - sparse (i, j, mean(j), n, m); |
7515
f3c00dc0912b
Eliminate the rest of the dispatched sparse functions
David Bateman <dbateman@free.fr>
parents:
7287
diff
changeset
|
55 var = sum (diff .* diff) ./ (count - 1); |
7151 | 56 endif |
57 | |
5164 | 58 endfunction |
59 | |
60 %!test | |
61 %! [n,m,v] = spstats([1 2 1 2 3 4],[2 2 1 1 1 1]); | |
7287 | 62 %! assert(n,sparse([4,2])); |
63 %! assert(m,sparse([10/4,3/2]),10*eps); | |
64 %! assert(v,sparse([5/3,1/2]),10*eps); |