blob: 4de65abf98b6ae2fdea98041ef1b926a54f42d87 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
package de.lmu.ifi.dbs.elki.data;
/*
This file is part of ELKI:
Environment for Developing KDD-Applications Supported by Index-Structures
Copyright (C) 2013
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 <http://www.gnu.org/licenses/>.
*/
/**
* Extended interface for sparse feature vector types.
*
* @author Erich Schubert
*
* @param <D> Data type
*/
public interface SparseFeatureVector<D> extends FeatureVector<D> {
/**
* Iterator over non-zero features only, <em>ascendingly</em>.
*
* Note: depending on the underlying implementation, this may or may not be
* the dimension. Use {@link #iterDim} to get the actual dimension. In fact,
* usually this will be the ith non-zero value, assuming an array
* representation.
*
* Think of this number as an iterator. For efficiency, it has a primitive
* type!
*
* Intended usage:
*
* <pre>
* {@code
* for (int iter = v.iter(); v.iterValid(iter); iter = v.iterAdvance(iter)) {
* final int dim = v.iterDim(iter);
* // Do something.
* }
* }
* </pre>
*
* @return Identifier for the first non-zero dimension, <b>not necessarily the
* dimension!</b>
*/
int iter();
/**
* Get the dimension an iterator points to.
*
* @param iter Iterator position
* @return Dimension the iterator refers to
*/
int iterDim(int iter);
/**
* Advance the iterator to the next position.
*
* @param iter Previous iterator position
* @return Next iterator position
*/
int iterAdvance(int iter);
/**
* Test the iterator position for validity.
*
* @param iter Iterator position
* @return {@code true} when it refers to a valid position.
*/
boolean iterValid(int iter);
}
|