scalaで移動ボックス平均

scalaで移動ボックス平均

object test{


        def box_mean(x:List[Double],n:Int=2):List[Double]={

                var y=List[Double]();
                var k:Int=0;
                var nn=n-1;
                var sum=0.0;
                x.foreach{ a =>
                        k match{
                                case k if k%n==n-1 => sum=sum+a/n;y=y::sum; sum=0;
                                case _ => sum=sum+a/n;
                        }

                        k=k+1;
                }
                y.reverse
        }

        def main(args: Array[String]){

                var l1=List[Double](1,2,3,4,5,6,7);
                var l2=box_mean(l1);
                l2.foreach{println}

        }
}

実行例:

$ scala test
1.5
3.5
5.5


(2)Box平均をとって差分

  def diff_boxmean(x:List[Double],n:Int=2):List[Double]={
                var tmp=0.0;
                var y=List[Double]();
                box_mean(x,n).foreach{a =>

                        y=a-tmp::y;
                        tmp=a;

                }
                y.reverse.tail
        }


(3)

     def diff_boxmean_cor(x1:List[Double],x2:List[Double],n:Int=2):Double    ={
                 var xx1=diff_boxmean(x1,n)
                  var xx2=diff_boxmean(x2,n)
                  val cor = new SpearmansCorrelation();
                  cor.correlation(xx1.toArray,xx2.toArray);
       }