/**
*
*/
package edu.berkeley.nlp.discPCFG;
/**
* @author petrov
*
*/
/**
* 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 {
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;
}
}