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; } }