天软金融分析.NET函数大全 > TSL函数 > 数学函数 > 一般统计量

统计函数功能拓展    

  •   我们以前的统计函数,只支持对于一维数组的处理,现在一并支持了对二维数组的处理,对行列操作的选择,移动统计,选择部分字段做统计等功能。
    比如func(In1,In2...InN[,Out1,...OutN]),这类函数,In参数除支持二维数组外,还增加了五个可选参数func(In1,In2...InN[,Out1,...OutN][,Opt1[,Opt2[, Opt3[, Opt4[, Opt5]]]]])
    Opt1:对列操作为0(默认),对行操作为1,可缺省(以下参数都是默认缺省的参数);
    Opt2:是否移动进行计算,为0表示不移动(默认),其余正整数表示移动计算的长度;
    Opt3:对字段筛选,nil表示全选(默认),可以使用数组进行多选,也可以使用简单类型进行单选
    Opt4:异常处理参数,按照存储位来进行管理(默认为0):
    第一位管理的是是否忽略字符串异常值,即1不报错,0报错。
    第二位管理的是nil值是否报错,即1报错,0不报错。
    第三位管的是计算移动长度的时候,nil值及字符串是否包括在内。即0不忽略,1忽略。
    这样的话:
    0表示一般处理(0b000),即字符串报错,nil值不报错,移动时异常值不忽略。
    1表示(0b001)字符串不0报错,nil值不报错,移动时异常值不忽略。
    2表示(0b010)与6表示(0b110)字符串报错,nil值报错。
    3表示(0b011)字符串不报错,nil值报错,移动时异常值不忽略。
    4表示(0b100)字符串报错,nil值不报错,计算移动单位时忽略nil值;
    5表示(0b101)字符串与nil不报错,计算移动单位时忽略nil值和字符串值;
    7表示(0b111)字符串不报错,nil值报错,计算移动单位时忽略字符串;
    Opt5:当In为空数组时的返回值,该参数默认缺省为0。
    常用统计量:以mean函数为例:
    正常数据的处理:
    a := array((1,2,3),(2,nil,4),(4,5,6)); //在一般的统计函数中,遇到nil是不会报错的
    return mean(a); //对每一列求均值
    return mean(a,1); //对每一行求均值
    return mean(a,0,2); //求取长度为2的移动平均
    return mean(a,0,2,array(0,1)); //只对0,1列做计算
    return mean(a,0,2,array(0,1),4);
    //比较和上一个返回,这里求移动均值时跳过了nil

    含字符串异常数据
    a := array((1,2,3),(2,nil,"a"),(4,5,6));
    return mean(a,0,2,array(0,1),1);
    //忽略含字符串元素时候的报错
    return mean(a,0,2,array(0,1),1+4);
    //比较和上一个返回,这里求移动均值时跳过了nil和字符串元素

    空数组时候的默认输出:
    Return mean(array(),0,0,nil,1,"默认输出值"); //输出第6个参数

    一维数组的处理和n*1二维数组类似,注意第二个参数一般为0,移动平均还是一维数组,一般平均结果是实数。
    a := rand(100);
    return mean(a); //结果为实数
    return mean(a,0,10); //长度为10的移动平均

    次序统计量,以Large函数为例:
    相比较统计函数的用法,次序统计函数主要要注意的是第二个不可缺省的参数的设置问题,比如:Large(Data:Array;N:[Int,Array]):[real,Array];
    N是一个整数的时候
    a := 1->10;
    a |= a;
    return _large(a,1); //这样可以得到每列最大的元素

    N是一个一维数组的时候
    a := rand(100,10);
    return _large(a,1->10); //对列做的时候,N的长度必须和列数目一致
    return _large(a,ones(100),1); //对行做的时候,N的长度必须和行数目一致