annotate src/samer/mds/ProximityFilter.java @ 8:5e3cbbf173aa tip

Reorganise some more
author samer
date Fri, 05 Apr 2019 22:41:58 +0100
parents bf79fb79ee13
children
rev   line source
samer@0 1 package samer.mds;
samer@0 2
samer@0 3 import samer.maths.*;
samer@0 4 import samer.tools.*;
samer@0 5 import samer.core.types.*;
samer@0 6 import java.util.*;
samer@0 7
samer@0 8 /** Compute component-wise filter coefficients using a
samer@0 9 a distance/proximity matrix. The filter kernel is centred on
samer@0 10 one of the elements, so that the coefficients are a function
samer@0 11 of the distance/proximity between each unit and the given
samer@0 12 "pivot" element.
samer@0 13 */
samer@0 14
samer@0 15 public class ProximityFilter extends NullTask implements Observer {
samer@0 16 Matrix R;
samer@0 17 VVector F;
samer@0 18 VFunction map; // map from proximity to coeff.
samer@0 19 VInteger i; // centre element, num elements
samer@0 20
samer@0 21 public ProximityFilter(Matrix R, VVector F, VFunction map) {
samer@0 22 this.R=R; this.F=F; this.map=map;
samer@0 23 i=new VInteger("pivot",0);
samer@0 24 i.setRange(0,R.getRowDimension()-1);
samer@0 25
samer@0 26 R.addObserver(this);
samer@0 27 map.addObserver(this);
samer@0 28 i.addObserver(this);
samer@0 29 }
samer@0 30 public void run() { map.getFunction().apply(R.getArray()[i.value],F.array()); }
samer@0 31 public void update(Observable obs, Object arg) { run(); F.changed(); }
samer@0 32 public void dispose() {
samer@0 33 map.deleteObserver(this);
samer@0 34 R.deleteObserver(this);
samer@0 35 i.dispose();
samer@0 36 }
samer@0 37 }