diff --git a/prism/src/prism/PrismUtils.java b/prism/src/prism/PrismUtils.java index 94309532..c2aaf652 100644 --- a/prism/src/prism/PrismUtils.java +++ b/prism/src/prism/PrismUtils.java @@ -404,15 +404,33 @@ public class PrismUtils } } + /** + * Normalise the entries of a vector in-place such that that they sum to 1. + * If {@code sum = 0.0}, all entries are set to {@code NaN} (assuming all entries are non-negative) + * @param vector the vector + * @return the altered vector (returned for convenience; it's the same one) + */ + public static double[] normalise(double[] vector) + { + double sum = 0.0; + int n = vector.length; + for (int state = 0; state < n; state++) { + sum += vector[state]; + } + for (int state = 0; state < n; state++) { + vector[state] /= sum; + } + return vector; + } + /** * Normalise the given entries in the vector in-place such that that they sum to 1, - * I.e., for all indizes of entries, set
- * {@code vector[s] = vector[s] / sum}, where
- * {@code sum = sum_{s in entries} (vector[s])
- * If {@code sum = 0.0}, all entries are set to {@code NaN}. + * i.e., for all indices {@code s}, set {@code vector[s] = vector[s] / sum}, + * where {@code sum = sum_{s in entries} (vector[s]).
+ * If {@code sum = 0.0}, all entries are set to {@code NaN} (assuming all entries are non-negative) * @param vector the vector * @param entries Iterable over the entries (must not contain duplicates) - * @return the altered vector + * @return the altered vector (returned for convenience; it's the same one) */ public static double[] normalise(double[] vector, IterableInt entries) {