package mikera.vectorz.impl;
import java.util.Arrays;
import java.util.List;
import mikera.indexz.Index;
import mikera.matrixx.AMatrix;
import mikera.vectorz.AVector;
import mikera.vectorz.Op2;
import mikera.vectorz.Vector;
import mikera.vectorz.Vectorz;
import mikera.vectorz.util.ErrorMessages;
import mikera.vectorz.util.VectorzException;
/**
* Abstract base class for Sparse vector implementations
* @author Mike
*
*/
@SuppressWarnings("serial")
public abstract class ASparseVector extends ASizedVector implements ISparseVector {
protected ASparseVector(int length) {
super(length);
}
/**
* Returns the number of non-sparse elements in the sparse vector.
*
* This will be greater or equal to the number of non-zero elements
*
* @return
*/
public abstract int nonSparseElementCount();
@Override
public abstract AVector nonSparseValues();
@Override
public abstract Index nonSparseIndex();
@Override
public double visitNonZero(IndexedElementVisitor elementVisitor) {
Index ix=nonSparseIndex();
int cnt=ix.length();
if (cnt==0) return 0.0;
AVector vs=nonSparseValues();
for (int k=0; k getSlices() {
// we prefer a ListWrapper for sparse vectors since it is O(1) to create.
// downside: causes boxing on individual element accesses
return new ListWrapper(this);
}
@Override
public double elementProduct() {
int n=nonSparseElementCount();
if (n(elementCount()*0.25))) return super.clone();
return SparseIndexedVector.create(this);
}
public boolean equals(ASparseVector v) {
if (v==this) return true;
if (v.length!=length) return false;
Index ni=nonSparseIndex();
for (int i=0; i
Ads help maintain this website.