package ch.akuhn.matrix;
public abstract class Function {
public static final Function COSINE_TO_DISSIMILARITY = new Function() {
@Override
public double apply(double d) {
return Math.sqrt(Math.max(0, 1 - d));
}
};
public static final Function SQUARE = new Function() {
@Override
public double apply(double d) {
return d * d;
}
};;
public abstract double apply(double d);
public static Function IDENTITY = new Function() {
@Override
public double apply(double d) {
return d;
}
};
public final void apply(double[] ds, int length) {
for (int n = 0; n < length; n++) ds[n] = apply(ds[n]);
}
public final void apply(double[] ds) {
for (int n = 0; n < ds.length; n++) ds[n] = apply(ds[n]);
}
public final void apply(double[][] dss) {
for (double[] ds: dss) for (int n = 0; n < ds.length; n++) ds[n] = apply(ds[n]);
}
//return d < 1 ? d : (d * 10) - 9;
//return d < 0.5 ? d * 2 : Math.pow(d * 2, 8);
//return d > 0.5 ? d / 4 + 0.25 : d;
//return d > 1.0 ? 1.0 : Math.pow(d, 0.25);
//return d < 0.5 ? d * 2 : Math.pow(d * 2, 8);
//double w = Math.abs(1 - d);
//return w < 0 ? 0 : w > 1 ? 1 : w;
}