summaryrefslogtreecommitdiff
path: root/src/de/lmu/ifi/dbs/elki/data/projection/NumericalFeatureSelection.java
diff options
context:
space:
mode:
authorErich Schubert <erich@debian.org>2012-06-30 00:55:33 +0200
committerAndrej Shadura <andrewsh@debian.org>2019-03-09 22:30:34 +0000
commit4343785ebed9d4145f417d86d581f18a0d31e4ac (patch)
tree546b0aa227d50caf4246be12f89ffcbae924f8e0 /src/de/lmu/ifi/dbs/elki/data/projection/NumericalFeatureSelection.java
parent593eae6c91717eb9f4ff5088ba460dd4210509c0 (diff)
parentace5fa7f57d49756c0e1b111a30f3b6a9436c1cb (diff)
Import Debian changes 0.5.0-1
elki (0.5.0-1) unstable; urgency=low * New upstream release: 0.5.0 final.
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/data/projection/NumericalFeatureSelection.java')
-rw-r--r--src/de/lmu/ifi/dbs/elki/data/projection/NumericalFeatureSelection.java44
1 files changed, 21 insertions, 23 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/data/projection/NumericalFeatureSelection.java b/src/de/lmu/ifi/dbs/elki/data/projection/NumericalFeatureSelection.java
index 7dfd580f..bd41e1cf 100644
--- a/src/de/lmu/ifi/dbs/elki/data/projection/NumericalFeatureSelection.java
+++ b/src/de/lmu/ifi/dbs/elki/data/projection/NumericalFeatureSelection.java
@@ -1,4 +1,5 @@
package de.lmu.ifi.dbs.elki.data.projection;
+
/*
This file is part of ELKI:
Environment for Developing KDD-Applications Supported by Index-Structures
@@ -22,13 +23,12 @@ package de.lmu.ifi.dbs.elki.data.projection;
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+import java.util.BitSet;
+
import de.lmu.ifi.dbs.elki.data.NumberVector;
import de.lmu.ifi.dbs.elki.data.type.SimpleTypeInformation;
import de.lmu.ifi.dbs.elki.data.type.TypeInformation;
import de.lmu.ifi.dbs.elki.data.type.VectorTypeInformation;
-import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.ArrayLikeUtil;
-import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.NumberArrayAdapter;
-import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.SubsetArrayAdapter;
/**
* Projection class for number vectors.
@@ -36,9 +36,8 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.SubsetArrayAdapter
* @author Erich Schubert
*
* @param <V> Vector type
- * @param <N> Number type
*/
-public class NumericalFeatureSelection<V extends NumberVector<V, N>, N extends Number> extends AbstractFeatureSelection<V, N> {
+public class NumericalFeatureSelection<V extends NumberVector<V, ?>> implements Projection<V, V> {
/**
* Minimum dimensionality required for projection
*/
@@ -55,37 +54,36 @@ public class NumericalFeatureSelection<V extends NumberVector<V, N>, N extends N
private int dimensionality;
/**
+ * Subspace
+ */
+ private BitSet bits;
+
+ /**
* Constructor.
*
- * @param dims Dimensions
+ * @param bits Dimensions
* @param factory Object factory
*/
- public NumericalFeatureSelection(int[] dims, V factory) {
- super(new SubsetArrayAdapter<N, V>(getAdapter(factory), dims));
+ public NumericalFeatureSelection(BitSet bits, V factory) {
+ super();
+ this.bits = bits;
this.factory = factory;
- this.dimensionality = dims.length;
+ this.dimensionality = bits.cardinality();
int mindim = 0;
- for(int dim : dims) {
- mindim = Math.max(mindim, dim + 1);
+ for(int i = bits.nextSetBit(0); i >= 0; i = bits.nextSetBit(i + 1)) {
+ mindim = Math.max(mindim, i + 1);
}
this.mindim = mindim;
}
- /**
- * Choose the best adapter for this.
- *
- * @param factory Object factory, for type inference
- * @return Adapter
- */
- private static <V extends NumberVector<V, N>, N extends Number> NumberArrayAdapter<N, ? super V> getAdapter(V factory) {
- return ArrayLikeUtil.numberVectorAdapter(factory);
- }
-
- @SuppressWarnings("unchecked")
@Override
public V project(V data) {
- return factory.newNumberVector(data, (NumberArrayAdapter<N, ? super V>) adapter);
+ double[] dbl = new double[dimensionality];
+ for(int i = bits.nextSetBit(0), j = 0; i >= 0; i = bits.nextSetBit(i + 1), j++) {
+ dbl[j] = data.doubleValue(i + 1);
+ }
+ return factory.newNumberVector(dbl);
}
@Override