From aed2ee8d58f896f82cb6e8c9abef743ab921452d Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Mon, 9 Oct 2023 11:21:54 -0500 Subject: [PATCH] include updated functions in relevancy computations --- .../extensions/computefunctions/ComputeFunctions.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/computefunctions/ComputeFunctions.java b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/computefunctions/ComputeFunctions.java index 5e429d2d3..8eb276020 100644 --- a/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/computefunctions/ComputeFunctions.java +++ b/engine-extensions/src/main/java/io/nosqlbench/engine/extensions/computefunctions/ComputeFunctions.java @@ -80,6 +80,7 @@ public class ComputeFunctions { if (actual.length < k) { throw new RuntimeException("indices fewer than limit, invalid precision computation: index count=" + actual.length + ", limit=" + k); } + relevant = Arrays.copyOfRange(relevant,0,k); actual = Arrays.copyOfRange(actual, 0, k); Arrays.sort(relevant); Arrays.sort(actual); @@ -126,6 +127,7 @@ public class ComputeFunctions { if (actual.length < k) { throw new RuntimeException("indices fewer than limit, invalid precision computation: index count=" + actual.length + ", limit=" + k); } + relevant = Arrays.copyOfRange(relevant,0,k); actual = Arrays.copyOfRange(actual, 0, k); Arrays.sort(relevant); Arrays.sort(actual); @@ -158,6 +160,7 @@ public class ComputeFunctions { * Reciprocal Rank - The multiplicative inverse of the first rank which is relevant. */ public static double reciprocal_rank(long[] relevant, long[] actual, int k) { + relevant = Arrays.copyOfRange(relevant,0,k); int firstRank = Intersections.firstMatchingIndex(relevant, actual, k); if (firstRank >= 0) { return 1.0d / (firstRank+1); @@ -174,6 +177,7 @@ public class ComputeFunctions { * RR as in M(RR) */ public static double reciprocal_rank(int[] relevant, int[] actual, int k) { + relevant = Arrays.copyOfRange(relevant,0,k); int firstRank = Intersections.firstMatchingIndex(relevant, actual, k); if (firstRank<0) { return 0; @@ -190,6 +194,7 @@ public class ComputeFunctions { } public static double average_precision(int[] relevant, int[] actual, int k) { + relevant = Arrays.copyOfRange(relevant,0,k); int maxK = Math.min(k,actual.length); HashSet relevantSet = new HashSet<>(relevant.length); for (Integer i : relevant) { @@ -211,6 +216,7 @@ public class ComputeFunctions { return average_precision(relevant, actual, actual.length); } public static double average_precision(long[] relevant, long[] actual, int k) { + relevant = Arrays.copyOfRange(relevant,0,k); int maxK = Math.min(k,actual.length); HashSet refset = new HashSet<>(relevant.length); for (Long i : relevant) {