in flink-ml-servable-core/src/main/java/org/apache/flink/ml/linalg/BLAS.java [133:157]
public static double norm(Vector x, double p) {
Preconditions.checkArgument(p >= 1.0, "p value must >= 1.0, but the current p is : " + p);
double norm = 0.0;
double[] data =
(x instanceof DenseVector) ? ((DenseVector) x).values : ((SparseVector) x).values;
if (p == 1.0) {
for (double datum : data) {
norm += Math.abs(datum);
}
} else if (p == 2.0) {
norm = norm2(x);
} else if (p == Double.POSITIVE_INFINITY) {
for (double datum : data) {
norm = Math.max(Math.abs(datum), norm);
}
} else {
for (double datum : data) {
norm += Math.pow(Math.abs(datum), p);
}
norm = Math.pow(norm, 1.0 / p);
}
return norm;
}