summaryrefslogtreecommitdiff
path: root/modules/statistics/macros/mean.sci
diff options
context:
space:
mode:
Diffstat (limited to 'modules/statistics/macros/mean.sci')
-rwxr-xr-xmodules/statistics/macros/mean.sci62
1 files changed, 62 insertions, 0 deletions
diff --git a/modules/statistics/macros/mean.sci b/modules/statistics/macros/mean.sci
new file mode 100755
index 000000000..08859d5dd
--- /dev/null
+++ b/modules/statistics/macros/mean.sci
@@ -0,0 +1,62 @@
+
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 1999 - INRIA - Carlos Klimann
+//
+// This file must be used under the terms of the CeCILL.
+// This source file is licensed as described in the file COPYING, which
+// you should have received as part of this distribution. The terms
+// are also available at
+// http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
+//
+
+
+function [y] = mean(x,orient)
+
+ //
+ // NOTES
+ // - modified by bruno to handle the case when x is an hypermatrix
+ // - restricted to matrix or hypermatrix of "constants" (that is
+ // real or complex numbers)
+ // - mean([]) return nan but mean([],orient) return [] (this
+ // is strange but corresponds to matlab behavior)
+
+ [lhs,rhs] = argn()
+ // some arguments checking
+ if rhs == 0 | rhs > 2 then
+ error(msprintf(gettext("%s: Wrong number of input argument: %d to %d expected.\n"),"mean",1,2)),
+ else
+ if type(x) ~= 1 & typeof(x) ~= "hypermat" then
+ error(msprintf(gettext("%s: Wrong type for input argument #%d: Real vector or matrix expected.\n"), "mean",1))
+ end
+ if type(x) ~= 1 then // that is x is an hypermat !
+ if type(x.entries) ~= 1 then
+ error(msprintf(gettext("%s: Wrong type for input argument #%d.\n"),"mean",1))
+ end
+ end
+ if rhs == 2 then
+ if orient == "r" then, orient = 1, end
+ if orient == "c" then, orient = 2, end
+ if orient == "m" then
+ flag=find(size(x)>1,1)
+ if flag==[] then
+ y=mean(x)
+ return
+ else
+ y=mean(x,flag)
+ return
+ end
+ end
+ if floor(orient)~=orient | orient < 1 | orient > length(size(x)) then
+ error(msprintf(gettext("%s: Wrong type for input argument #%d: Scalar or vector expected.\n"),"mean",2)),
+ end
+ end
+ end
+
+ if rhs==1 then
+ if x==[] then y=%nan;return,end
+ y=sum(x)/size(x,"*")
+ else
+ if x==[] then y=[];return,end
+ y=sum(x,orient)/size(x,orient)
+ end
+endfunction