package is2.parser; import is2.data.F2SF; import is2.data.FV; import is2.data.Instances; import is2.data.Parse; import is2.util.DB; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; final public class ParametersFloat extends Parameters { public float[] parameters; public float[] total; public ParametersFloat(int size) { parameters = new float[size]; total = new float[size]; for (int i = 0; i < parameters.length; i++) { parameters[i] = 0F; total[i] = 0F; } } /** * @param parameters2 */ public ParametersFloat(float[] p) { parameters = p; } @Override public void average(double avVal) { for (int j = 0; j < total.length; j++) { parameters[j] = total[j] / ((float) avVal); } total = null; } public ParametersFloat average2(double avVal) { float[] px = new float[this.parameters.length]; for (int j = 0; j < total.length; j++) { px[j] = total[j] / ((float) avVal); } ParametersFloat pf = new ParametersFloat(px); return pf; } @Override public void update(FV act, FV pred, Instances isd, int instc, Parse d, double upd, double e) { e++; float lam_dist = getScore(act) - getScore(pred); float b = (float) e - lam_dist; FV dist = act.getDistVector(pred); dist.update(parameters, total, hildreth(dist, b), upd, false); } protected double hildreth(FV a, double b) { double A = a.dotProduct(a); if (A <= 0.0000000000000000001) { return 0.0; } return b / A; } public float getScore(FV fv) { if (fv == null) { return 0.0F; } return fv.getScore(parameters, false); } @Override final public void write(DataOutputStream dos) throws IOException { dos.writeInt(parameters.length); for (float d : parameters) { dos.writeFloat(d); } } @Override public void read(DataInputStream dis) throws IOException { parameters = new float[dis.readInt()]; int notZero = 0; for (int i = 0; i < parameters.length; i++) { parameters[i] = dis.readFloat(); if (parameters[i] != 0.0F) { notZero++; } } DB.println("read parameters " + parameters.length + " not zero " + notZero); } public int countNZ() { int notZero = 0; for (int i = 0; i < parameters.length; i++) { if (parameters[i] != 0.0F) { notZero++; } } return notZero; // DB.println("read parameters "+parameters.length+" not zero "+notZero); } /* * (non-Javadoc) @see is2.sp09k99995.Parameters#getFV() */ @Override public F2SF getFV() { return new F2SF(parameters); } /* * (non-Javadoc) @see is2.sp09k99999.Parameters#size() */ @Override public int size() { return parameters.length; } }