From: <aba...@us...> - 2012-06-24 10:26:30
|
Revision: 10680 http://octave.svn.sourceforge.net/octave/?rev=10680&view=rev Author: abarth93 Date: 2012-06-24 10:26:23 +0000 (Sun, 24 Jun 2012) Log Message: ----------- Modified Paths: -------------- trunk/octave-forge/extra/ncArray/inst/@BaseArray/reduce.m trunk/octave-forge/extra/ncArray/inst/@BaseArray/sum.m trunk/octave-forge/extra/ncArray/inst/test_ncarray.m Added Paths: ----------- trunk/octave-forge/extra/ncArray/inst/@BaseArray/mean.m trunk/octave-forge/extra/ncArray/inst/@BaseArray/prod.m trunk/octave-forge/extra/ncArray/inst/@BaseArray/std.m trunk/octave-forge/extra/ncArray/inst/@BaseArray/sumsq.m trunk/octave-forge/extra/ncArray/inst/@BaseArray/var.m Added: trunk/octave-forge/extra/ncArray/inst/@BaseArray/mean.m =================================================================== --- trunk/octave-forge/extra/ncArray/inst/@BaseArray/mean.m (rev 0) +++ trunk/octave-forge/extra/ncArray/inst/@BaseArray/mean.m 2012-06-24 10:26:23 UTC (rev 10680) @@ -0,0 +1,16 @@ +% s = mean (X, DIM) +% compute the mean along dimension dim +% See also +% mean +function s = mean(self,varargin) + +funred = @plus; +funelem = @(x) x; + +[s,n] = reduce(self,funred,funelem,varargin{:}); + +if isempty(s) + s = 0; +else + s = s/n; +end Added: trunk/octave-forge/extra/ncArray/inst/@BaseArray/prod.m =================================================================== --- trunk/octave-forge/extra/ncArray/inst/@BaseArray/prod.m (rev 0) +++ trunk/octave-forge/extra/ncArray/inst/@BaseArray/prod.m 2012-06-24 10:26:23 UTC (rev 10680) @@ -0,0 +1,10 @@ +function s = prod(self,varargin) + +funred = @times; +funelem = @(x) x; + +s = reduce(self,funred,funelem,varargin{:}); + +if isempty(s) + s = 1; +end Modified: trunk/octave-forge/extra/ncArray/inst/@BaseArray/reduce.m =================================================================== --- trunk/octave-forge/extra/ncArray/inst/@BaseArray/reduce.m 2012-06-24 09:56:12 UTC (rev 10679) +++ trunk/octave-forge/extra/ncArray/inst/@BaseArray/reduce.m 2012-06-24 10:26:23 UTC (rev 10680) @@ -1,5 +1,9 @@ -function s = reduce(self,funred,funelem,dim) +% [s,n] = reduce(self,funred,funelem,dim) +% reduce array using the function funred applied to all elements +% after the function funelem was applied along dimension dim +function [s,n] = reduce(self,funred,funelem,dim) + sz = size(self); if nargin == 3 dim = find(sz ~= 1,1); @@ -15,13 +19,15 @@ idx.subs{i} = ':'; end -if size(self,dim) == 0 +n = size(self,dim); + +if n == 0 s = []; else idx.subs{dim} = 1; s = funelem(subsref(self,idx)); - for i=2:size(self,dim) + for i=2:n idx.subs{dim} = i; s = funred(s,funelem(subsref(self,idx))); end Added: trunk/octave-forge/extra/ncArray/inst/@BaseArray/std.m =================================================================== --- trunk/octave-forge/extra/ncArray/inst/@BaseArray/std.m (rev 0) +++ trunk/octave-forge/extra/ncArray/inst/@BaseArray/std.m 2012-06-24 10:26:23 UTC (rev 10680) @@ -0,0 +1,7 @@ +% s = std (X, OPT, DIM) +% compute the standard deviation +% See also +% std +function s = std(self,varargin) + +s = sqrt(var(self,varargin{:})); Modified: trunk/octave-forge/extra/ncArray/inst/@BaseArray/sum.m =================================================================== --- trunk/octave-forge/extra/ncArray/inst/@BaseArray/sum.m 2012-06-24 09:56:12 UTC (rev 10679) +++ trunk/octave-forge/extra/ncArray/inst/@BaseArray/sum.m 2012-06-24 10:26:23 UTC (rev 10680) @@ -1,3 +1,8 @@ +% s = sum (X, DIM) +% compute the sum along dimension dim +% See also +% sum + function s = sum(self,varargin) funred = @plus; Added: trunk/octave-forge/extra/ncArray/inst/@BaseArray/sumsq.m =================================================================== --- trunk/octave-forge/extra/ncArray/inst/@BaseArray/sumsq.m (rev 0) +++ trunk/octave-forge/extra/ncArray/inst/@BaseArray/sumsq.m 2012-06-24 10:26:23 UTC (rev 10680) @@ -0,0 +1,15 @@ +% s = sumsq (x, dim) +% compute the sum squared along dimension dim +% See also +% sum + +function s = sumsq(self,varargin) + +funred = @plus; +funelem = @(x) x.^2; + +s = reduce(self,funred,funelem,varargin{:}); + +if isempty(s) + s = 1; +end Added: trunk/octave-forge/extra/ncArray/inst/@BaseArray/var.m =================================================================== --- trunk/octave-forge/extra/ncArray/inst/@BaseArray/var.m (rev 0) +++ trunk/octave-forge/extra/ncArray/inst/@BaseArray/var.m 2012-06-24 10:26:23 UTC (rev 10680) @@ -0,0 +1,29 @@ +% s = var (x, opt, dim) +% compute the variance along dimension dim +% See also +% var + +function s = var(self,opt,varargin) + +if nargin == 1 + opt = 0; +elseif isempty(opt) + opt = 0; +end + +m = mean(self,varargin{:}); + +funred = @plus; +funelem = @(x) (x-m).^2; + +[s,n] = reduce(self,funred,funelem,varargin{:}); + +if isempty(s) + s = 0; +else + if opt == 0 + s = s/(n-1); + else + s = s/n; + end +end Modified: trunk/octave-forge/extra/ncArray/inst/test_ncarray.m =================================================================== --- trunk/octave-forge/extra/ncArray/inst/test_ncarray.m 2012-06-24 09:56:12 UTC (rev 10679) +++ trunk/octave-forge/extra/ncArray/inst/test_ncarray.m 2012-06-24 10:26:23 UTC (rev 10680) @@ -95,7 +95,44 @@ sumSSTref = sum(SST_ref); assert(isequalwithequalnans(sumSST, sumSSTref)) +prodSST = prod(SST); +prodSSTref = prod(SST_ref); +assert(isequalwithequalnans(prodSST, prodSSTref)) + +sumsqSST = sumsq(SST); +sumsqSSTref = sumsq(SST_ref); +assert(isequalwithequalnans(sumsqSST, sumsqSSTref)) + +meanSST = mean(SST); +meanSSTref = mean(SST_ref); +assert(isequalwithequalnans(meanSST, meanSSTref)) + +varSST = var(SST); +varSSTref = var(SST_ref); +assert(isequalwithequalnans(varSST, varSSTref)) + +varSST = var(SST,1); +varSSTref = var(SST_ref,1); +assert(isequalwithequalnans(varSST, varSSTref)) + +varSST = var(SST,[],2); +varSSTref = var(SST_ref,[],2); +assert(isequalwithequalnans(varSST, varSSTref)) + +stdSST = std(SST); +stdSSTref = std(SST_ref); +assert(isequalwithequalnans(stdSST, stdSSTref)) + +stdSST = std(SST,1); +stdSSTref = std(SST_ref,1); +assert(isequalwithequalnans(stdSST, stdSSTref)) + +stdSST = std(SST,[],2); +stdSSTref = std(SST_ref,[],2); +assert(isequalwithequalnans(stdSST, stdSSTref)) + + % writing r = round(randn(size(SST))); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |