package edu.fudan.ml.types.sv; import java.util.ArrayList; /** * 稀疏向量,并实现各种向量运算 * @version 1.0 * @since 1.0 * */ public interface SparseVector{ /** * 向量减法: x-y * * @param sv */ public void minus(SparseVector sv); /** * 对应位置加上值: x[i] = x[i]+c * * @param id * @param c */ public void add(int id, float c); /** * 向量加法:x+y * * @param sv */ public void plus(SparseVector sv); /** * 计算x+y*w * * @param sv * @param w */ public void plus(SparseVector sv, float w); public float elementAt(int id); public int[] indices(); public float dotProduct(float[] v); /** * 向量点积: x*y * * @param sv * @return 结果 */ public float dotProduct(SparseVector sv); /** * 向量点积: x*(y+c) * * @param sv * @return 结果 */ public float dotProduct(SparseVector sv, float c); public void scaleMultiply(float c); public void scaleDivide(float c); public float l1Norm(); public float l2Norm2(); public float l2Norm(); public float infinityNorm(); public SparseVector replicate(ArrayList<Integer> list, int dim); /** * 计算两个向量距离 * * @param sv * @return 距离值 */ public float euclideanDistance(SparseVector sv); public void clear(); public void normalize(); public void normalize2(); public float get(int idx); public void put(int idx, float value); /** * 去掉第idx维特征 * @param idx * @return */ public float remove(int idx); /** * 稀疏元素个数 * @return */ public int size(); public boolean containsKey(int idx); }