b529edbc0fef5783a30fae4d4e30231ec0547d4e
[scilab.git] / scilab / modules / overloading / macros / %hm_stdev.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) INRIA
3 //
4 // Copyright (C) 2012 - 2016 - Scilab Enterprises
5 //
6 // This file is hereby licensed under the terms of the GNU GPL v2.0,
7 // pursuant to article 5.3.4 of the CeCILL v.2.1.
8 // This file was originally licensed under the terms of the CeCILL v2.1,
9 // and continues to be available under such terms.
10 // For more information, see the COPYING file which you should have received
11 // along with this program.
12
13 function x = %hm_stdev(m, d, ms)
14     if argn(2) < 3 then
15         ms = %f
16     end
17     if argn(2) == 3 & type(ms)~=1 & typeof(ms) ~= "hypermat" then
18         msg = _("%s: Wrong type for input argument #%d: A real matrix expected.\n")
19         error(msprintf(msg, "stdev", 3));
20     end
21     if d > length(size(m)) then
22         msg = _("%s: Wrong value for input argument #%d: integer <= ndims(argument #%d) expected.\n")
23         error(msprintf(msg,"stdev",2,1));
24     end
25
26     if argn(2) == 1 | d == "*" then
27         if argn(2) == 3 then
28             x = stdev(m(:), "*", ms);
29         else
30             x = stdev(m(:), "*");
31         end
32         return
33     elseif d == "r" then
34         d = 1;
35     elseif d == "c" then
36         d = 2;
37     end
38     dims = size(m);
39     N = size(dims, "*");
40     p1 = prod(dims(1:d-1));// step to build one vector on which stdev is applied
41     p2 = p1*dims(d);//step for beginning of next vectors
42     ind = (0:p1:p2-1)';// selection for building one vector
43     deb = (1:p1);
44     I = ind*ones(deb)+ones(ind)*deb;
45
46     ind = (0:p2:prod(dims)-1);
47     I = ones(ind).*.I+ind.*.ones(I);
48
49     if argn(2) == 3 then
50         if isscalar(ms) then
51             x = stdev(matrix(m(I),dims(d),-1), 1, ms);
52         else
53             x = stdev(matrix(m(I),dims(d),-1), 1, ms(:)');
54         end
55     else
56         x = stdev(matrix(m(I),dims(d),-1), 1);
57     end
58     dims(d) = 1;
59     x = matrix(x, dims)
60 endfunction