diff options
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.java | 28 |
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 |