package edu.fudan.ml.types.sv; import gnu.trove.iterator.TIntFloatIterator; import gnu.trove.iterator.TIntIterator; import gnu.trove.list.array.TIntArrayList; public class BinarySparseVector implements ISparseVector { private static final long serialVersionUID = 3666569734894722449L; TIntArrayList data; public BinarySparseVector(){ data = new TIntArrayList(); } public BinarySparseVector(int len) { data = new TIntArrayList(len); } @Override public float dotProduct(float[] vector) { TIntIterator it = data.iterator(); float sum = 0f; while(it.hasNext()){ int i = it.next(); sum += vector[i]; } return sum; } @Override public void put(int i) { data.add(i); } @Override public void put(int[] idx) { for(int i=0;i<idx.length;i++){ if(idx[i]!=-1) data.add(idx[i]); } } @Override public float dotProduct(HashSparseVector sv) { float v =0f; TIntIterator it = data.iterator(); while(it.hasNext()){ int i = it.next(); v += sv.get(i); } return v; } private int size() { return data.size(); } /** * */ public float l2Norm2() { return data.size(); } }