Newer
Older
package azgracompress.quantization.vector;
import azgracompress.data.V3i;
/**
* Codebook for vector quantizer.
*/
public class VQCodebook {
/**
* Quantization vectors.
*/
private final CodebookEntry[] vectors;
/**
* Absolute frequencies of quantization vectors.
*/
private long[] vectorFrequencies;
/**
* Size of the codebook.
*/
private final int codebookSize;
/**
* Vector dimensions.
*/
private final V3i vectorDims;
public VQCodebook(final V3i vectorDims, final CodebookEntry[] vectors, final long[] vectorFrequencies) {
//assert (vectors.length == vectorFrequencies.length);
this.vectorDims = vectorDims;
this.vectors = vectors;
this.vectorFrequencies = vectorFrequencies;
this.codebookSize = vectors.length;
}
/**
* Get vectors (quantization vectors) from the codebook.
*
* @return Quantization vectors.
*/
public CodebookEntry[] getVectors() {
return vectors;
}
public int[][] getRawVectors() {
assert (codebookSize == vectors.length);
assert (vectors[0].getVector().length == (int) vectorDims.multiplyTogether());
final int[][] rawCodebook = new int[vectors.length][(int) vectorDims.multiplyTogether()];
for (int i = 0; i < codebookSize; i++) {
rawCodebook[i] = vectors[i].getVector();
}
return rawCodebook;
}
/**
* Get frequencies of codebook vectors at indices.
*
* @return Frequencies of vectors.
*/
public long[] getVectorFrequencies() {
return vectorFrequencies;
}
/**
* Get codebook size.
*
* @return Codebook size.
*/
public int getCodebookSize() {
return codebookSize;
}
/**
* Get vector dimensions.
*
* @return Vector dimensions.
*/
public V3i getVectorDims() {
return vectorDims;
}
}