~ubuntu-branches/ubuntu/vivid/elki/vivid

« back to all changes in this revision

Viewing changes to src/de/lmu/ifi/dbs/elki/datasource/filter/normalization/InverseDocumentFrequencyNormalization.java

  • Committer: Package Import Robot
  • Author(s): Erich Schubert
  • Date: 2014-01-22 16:23:20 UTC
  • mfrom: (1.1.8)
  • Revision ID: package-import@ubuntu.com-20140122162320-dtqtgcdiki8t9unc
Tags: 0.6.0-1
* New upstream final.
* 3DPC extension is not included, but may be uploaded as a separate
  package when there is actual need (it is a demo software, not meant
  for use outside of research, so just get the source code!)
* Upgrade to policy 3.9.5.0 (no changes)

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
import gnu.trove.iterator.TIntDoubleIterator;
27
27
import gnu.trove.map.TIntDoubleMap;
28
28
import gnu.trove.map.hash.TIntDoubleHashMap;
29
 
 
30
 
import java.util.BitSet;
31
 
 
32
29
import de.lmu.ifi.dbs.elki.data.SparseNumberVector;
33
30
import de.lmu.ifi.dbs.elki.data.type.SimpleTypeInformation;
34
31
import de.lmu.ifi.dbs.elki.data.type.TypeUtil;
78
75
 
79
76
  @Override
80
77
  protected void prepareProcessInstance(V featureVector) {
81
 
    BitSet b = featureVector.getNotNullMask();
82
 
    for(int i = b.nextSetBit(0); i >= 0; i = b.nextSetBit(i + 1)) {
83
 
      if(featureVector.doubleValue(i) >= 0.0) {
84
 
        idf.put(i, idf.get(i) + 1);
 
78
    for(int it = featureVector.iter(); featureVector.iterValid(it); it = featureVector.iterAdvance(it)) {
 
79
      if(featureVector.iterDoubleValue(it) >= 0.) {
 
80
        final int dim = featureVector.iterDim(it);
 
81
        idf.put(dim, idf.get(dim) + 1);
85
82
      }
86
83
    }
87
84
    objcnt += 1;
100
97
 
101
98
  @Override
102
99
  protected V filterSingleObject(V featureVector) {
103
 
    BitSet b = featureVector.getNotNullMask();
104
100
    TIntDoubleHashMap vals = new TIntDoubleHashMap();
105
 
    for(int i = b.nextSetBit(0); i >= 0; i = b.nextSetBit(i + 1)) {
106
 
      vals.put(i, (float) (featureVector.doubleValue(i) * idf.get(i)));
 
101
    for(int it = featureVector.iter(); featureVector.iterValid(it); it = featureVector.iterAdvance(it)) {
 
102
      final int dim = featureVector.iterDim(it);
 
103
      vals.put(dim, featureVector.iterDoubleValue(it) * idf.get(dim));
107
104
    }
108
105
    return ((SparseNumberVector.Factory<V, ?>) factory).newNumberVector(vals, featureVector.getDimensionality());
109
106
  }
110
107
 
111
108
  @Override
112
109
  public V restore(V featureVector) {
113
 
    BitSet b = featureVector.getNotNullMask();
114
110
    TIntDoubleHashMap vals = new TIntDoubleHashMap();
115
 
    for(int i = b.nextSetBit(0); i >= 0; i = b.nextSetBit(i + 1)) {
116
 
      vals.put(i, (float) (featureVector.doubleValue(i) / idf.get(i)));
 
111
    for(int it = featureVector.iter(); featureVector.iterValid(it); it = featureVector.iterAdvance(it)) {
 
112
      final int dim = featureVector.iterDim(it);
 
113
      vals.put(dim, featureVector.iterDoubleValue(it) / idf.get(dim));
117
114
    }
118
115
    return ((SparseNumberVector.Factory<V, ?>) factory).newNumberVector(vals, featureVector.getDimensionality());
119
116
  }