package de.lmu.ifi.dbs.elki.data; /* This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures Copyright (C) 2015 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ import de.lmu.ifi.dbs.elki.data.spatial.SpatialComparable; import de.lmu.ifi.dbs.elki.math.linearalgebra.Vector; import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.NumberArrayAdapter; /** * Interface NumberVector defines the methods that should be implemented by any * Object that is element of a real vector space of type N. * * @author Arthur Zimek * * @apiviz.landmark * @apiviz.has Vector * @apiviz.exclude de.lmu.ifi.dbs.elki.(datasource.filter|data.projection).* */ public interface NumberVector extends FeatureVector, SpatialComparable { @Deprecated @Override Number getValue(int dimension); /** * Returns the value in the specified dimension as double. * * Note: this might seem redundant with respect to * {@code getValue(dim).doubleValue()}, but usually this is much more * efficient due to boxing/unboxing cost. * * @param dimension the desired dimension, where 0 ≤ dimension < * this.getDimensionality() * @return the value in the specified dimension */ double doubleValue(int dimension); /** * Returns the value in the specified dimension as float. * * Note: this might seem redundant with respect to * {@code getValue(dim).floatValue()}, but usually this is much more efficient * due to boxing/unboxing cost. * * @param dimension the desired dimension, where 0 ≤ dimension < * this.getDimensionality() * @return the value in the specified dimension */ float floatValue(int dimension); /** * Returns the value in the specified dimension as int. * * Note: this might seem redundant with respect to * {@code getValue(dim).intValue()}, but usually this is much more efficient * due to boxing/unboxing cost. * * @param dimension the desired dimension, where 0 ≤ dimension < * this.getDimensionality() * @return the value in the specified dimension */ int intValue(int dimension); /** * Returns the value in the specified dimension as long. * * Note: this might seem redundant with respect to * {@code getValue(dim).longValue()}, but usually this is much more efficient * due to boxing/unboxing cost. * * @param dimension the desired dimension, where 0 ≤ dimension < * this.getDimensionality() * @return the value in the specified dimension */ long longValue(int dimension); /** * Returns the value in the specified dimension as short. * * Note: this might seem redundant with respect to * {@code getValue(dim).shortValue()}, but usually this is much more efficient * due to boxing/unboxing cost. * * @param dimension the desired dimension, where 0 ≤ dimension < * this.getDimensionality() * @return the value in the specified dimension */ short shortValue(int dimension); /** * Returns the value in the specified dimension as byte. * * Note: this might seem redundant with respect to * {@code getValue(dim).byteValue()}, but usually this is much more efficient * due to boxing/unboxing cost. * * @param dimension the desired dimension, where 0 ≤ dimension < * this.getDimensionality() * @return the value in the specified dimension */ byte byteValue(int dimension); /** * Returns a Vector representing in one column and * getDimensionality() rows the values of this NumberVector of V. * * @return a Matrix representing in one column and * getDimensionality() rows the values of this * NumberVector of V */ Vector getColumnVector(); /** * Factory API for this feature vector. * * @author Erich Schubert * * @apiviz.has NumberVector * * @param Vector type */ interface Factory extends FeatureVector.Factory { /** * Returns a new NumberVector of N for the given values. * * @param values the values of the NumberVector * @return a new NumberVector of N for the given values */ V newNumberVector(double[] values); /** * Returns a new NumberVector of N for the given values. * * @param values Existing number vector * @return a new NumberVector of N for the given values */ V newNumberVector(NumberVector values); /** * Instantiate from any number-array like object. * * @param Array type * @param array Array * @param adapter Adapter * @return a new NumberVector of N for the given values. */ V newNumberVector(A array, NumberArrayAdapter adapter); } }