package edu.berkeley.nlp.classify;
import java.io.Serializable;
/**
* The IndexLinearizer maintains the linearization of the two-dimensional
* features-by-labels pair space. This is because, while we might think
* about lambdas and derivatives as being indexed by a feature-label pair,
* the optimization code expects one long vector for lambdas and
* derivatives. To go from a pair featureIndex, labelIndex to a single
* pairIndex, use getLinearIndex().
*/
public class IndexLinearizer implements Serializable {
/**
*
*/
private static final long serialVersionUID = 6164226851901151038L;
int numFeatures;
int numLabels;
public int getNumLinearIndexes() {
return numFeatures * numLabels;
}
public int getLinearIndex(int featureIndex, int labelIndex) {
return labelIndex + featureIndex * numLabels;
}
public int getFeatureIndex(int linearIndex) {
return linearIndex / numLabels;
}
public int getLabelIndex(int linearIndex) {
return linearIndex % numLabels;
}
public IndexLinearizer(int numFeatures, int numLabels) {
this.numFeatures = numFeatures;
this.numLabels = numLabels;
}
}