Mercurial > hg > jslab
view src/samer/models/Covariance.java @ 5:b67a33c44de7
Remove some crap, etc
author | samer |
---|---|
date | Fri, 05 Apr 2019 21:34:25 +0100 |
parents | bf79fb79ee13 |
children |
line wrap: on
line source
/* * Copyright (c) 2000, Samer Abdallah, King's College London. * All rights reserved. * * This software is provided AS iS and WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. */ package samer.models; import samer.core.*; import samer.core.types.*; import samer.maths.*; import samer.tools.*; import java.util.*; /** Collect covariance statistics assuming input is zero mean. */ public class Covariance extends NamedTask { VVector vector; Matrix C; int n, count; double [] x; double [][] _C; VDouble rate; double [] sig; public Covariance(VVector vec) throws Exception { super("covariance"); Shell.push(node); n=vec.size(); C = new Matrix("C",n,n); // second moment: sum products rate=new VDouble("rate",0.001); Shell.pop(); sig= new double[n]; _C=C.getArray(); x=vec.array(); vector=vec; } public void dispose() { rate.dispose(); C.dispose(); } public void reset() { C.zero(); } public void getCorrelation(Matrix R) { double [][] _R=R.getArray(); // first get std devs and put 1s down diagonal for (int i=0; i<n; i++) { sig[i] = Math.sqrt(_C[i][i]); } for (int i=0; i<n; i++) { for (int j=0; j<i; j++) { // off diagonal _R[i][j] = _C[i][j]/(sig[i]*sig[j]); // _R[j][i] = _R[i][j]; } _R[i][i]=1; } R.changed(); } public void starting() {} public void stopping() {} public void run() { double eta=rate.value; for (int i=0; i<n; i++) { double [] a=_C[i]; double k=x[i]; for (int j=0; j<=i; j++) { a[j] += eta*(k*x[j]-a[j]); } } C.changed(); } }