summaryrefslogtreecommitdiff
path: root/src/de/lmu/ifi/dbs/elki/database/relation/RelationUtil.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/database/relation/RelationUtil.java')
-rw-r--r--src/de/lmu/ifi/dbs/elki/database/relation/RelationUtil.java28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/database/relation/RelationUtil.java b/src/de/lmu/ifi/dbs/elki/database/relation/RelationUtil.java
index b6549d6c..662767b7 100644
--- a/src/de/lmu/ifi/dbs/elki/database/relation/RelationUtil.java
+++ b/src/de/lmu/ifi/dbs/elki/database/relation/RelationUtil.java
@@ -26,6 +26,8 @@ package de.lmu.ifi.dbs.elki.database.relation;
import de.lmu.ifi.dbs.elki.data.FeatureVector;
import de.lmu.ifi.dbs.elki.data.NumberVector;
import de.lmu.ifi.dbs.elki.data.type.VectorFieldTypeInformation;
+import de.lmu.ifi.dbs.elki.database.ids.ArrayDBIDs;
+import de.lmu.ifi.dbs.elki.database.ids.DBIDArrayIter;
/**
* Utility functions for handling database relation.
@@ -87,6 +89,32 @@ public final class RelationUtil {
}
/**
+ * <em>Copy</em> a relation into a double matrix.
+ *
+ * This is <em>not recommended</em> unless you need to modify the data
+ * temporarily.
+ *
+ * @param relation Relation
+ * @param ids IDs, with well-defined order (i.e. array)
+ * @return Data matrix
+ */
+ public static double[][] relationAsMatrix(final Relation<? extends NumberVector<?>> relation, ArrayDBIDs ids) {
+ final int rowdim = ids.size();
+ final int coldim = dimensionality(relation);
+ double[][] mat = new double[rowdim][coldim];
+ int r = 0;
+ for (DBIDArrayIter iter = ids.iter(); iter.valid(); iter.advance(), r++) {
+ NumberVector<?> vec = relation.get(iter);
+ double[] row = mat[r];
+ for (int c = 0; c < coldim; c++) {
+ row[c] = vec.doubleValue(c);
+ }
+ }
+ assert (r == rowdim);
+ return mat;
+ }
+
+ /**
* Get the column name or produce a generic label "Column XY".
*
* @param rel Relation