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