package mikera.vectorz.ops;
import mikera.arrayz.INDArray;
import mikera.vectorz.AVector;
import mikera.vectorz.Op;
public class Absolute extends Op {
public static final Absolute INSTANCE=new Absolute();
@Override
public double apply(double x) {
return Math.abs(x);
}
@Override
public void applyTo(AVector v) {
v.abs();
}
@Override
public void applyTo(INDArray v) {
v.abs();
}
@Override
public double averageValue() {
return 0.5;
}
@Override
public boolean hasDerivative() {
return true;
}
@Override
public boolean hasInverse() {
return false;
}
@Override
public boolean hasDerivativeForOutput() {
return false;
}
@Override
public double derivative(double x) {
return x>=0?1.0:-1.0;
}
}