All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.wikibrain.matrix.BaseMatrixRow Maven / Gradle / Ivy

There is a newer version: 0.9.1
Show newest version
package org.wikibrain.matrix;

import gnu.trove.map.hash.TIntFloatHashMap;

import java.util.LinkedHashMap;

/**
 * A base class for matrix rows.
 * TODO: rename index to id. Indices are dense, ids are sparse.
 */
public abstract class BaseMatrixRow implements MatrixRow {
    @Override
    public abstract int getColIndex(int i);

    @Override
    public abstract float getColValue(int i);

    @Override
    public abstract int getRowIndex();

    @Override
    public abstract int getNumCols();

    @Override
    public LinkedHashMap asMap() {
        LinkedHashMap result = new LinkedHashMap();
        for (int i = 0; i < getNumCols(); i++) {
            result.put(getColIndex(i), getColValue(i));
        }
        return result;
    }

    @Override
    public TIntFloatHashMap asTroveMap() {
        TIntFloatHashMap result = new TIntFloatHashMap(getNumCols()*2);
        for (int i = 0; i < getNumCols(); i++) {
            result.put(getColIndex(i), getColValue(i));
        }
        return result;
    }

    @Override
    public double getNorm() {
        double length = 0.0;
        for (int i = 0; i < getNumCols(); i++) {
            length += getColValue(i) * getColValue(i);
        }
        return Math.sqrt(length);
    }

    @Override
    public int getIndexForId(int id) {
        for (int i = 0; i < getNumCols(); i++) {
            if (getColIndex(i) == id) {
                return i;
            }
        }
        return -1;
    }

    @Override
    public float getValueForId(int id) {
        for (int i = 0; i < getNumCols(); i++) {
            if (getColIndex(i) == id) {
                return getColValue(i);
            }
        }
        return Float.NaN;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy