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); }