java.lang.Object
dev.nm.algebra.linear.matrix.doubles.matrixtype.sparse.SparseVector
All Implemented Interfaces:
SparseStructure, Vector, AbelianGroup<Vector>, BanachSpace<Vector,Real>, HilbertSpace<Vector,Real>, VectorSpace<Vector,Real>, DeepCopyable, Iterable<SparseVector.Entry>
Direct Known Subclasses:
Basis

public class SparseVector extends Object implements Vector, SparseStructure, Iterable<SparseVector.Entry>
A sparse vector stores only non-zero values.
  • Constructor Details

    • SparseVector

      public SparseVector(int size)
      Constructs a sparse vector.
      Parameters:
      size - the size of the vector
    • SparseVector

      public SparseVector(int size, int[] indices, double[] values)
      Constructs a sparse vector.
      Parameters:
      size - the size of the vector
      indices - the indices of the non-zero values
      values - the non-zero values
    • SparseVector

      public SparseVector(int size, Collection<SparseVector.Entry> entries)
      Constructs a sparse vector.
      Parameters:
      size - the size of the vector
      entries - the sparse vector entries
    • SparseVector

      public SparseVector(double... v)
      Constructs a sparse vector from a double[].
      Parameters:
      v - a vector
    • SparseVector

      public SparseVector(Vector v)
      Constructs a sparse vector from a vector.
      Parameters:
      v - a vector
    • SparseVector

      public SparseVector(SparseVector that)
      Copy constructor.
      Parameters:
      that - the vector to be copied
  • Method Details

    • size

      public int size()
      Description copied from interface: Vector
      Get the length of this vector.
      Specified by:
      size in interface Vector
      Returns:
      the vector length
    • get

      public double get(int index)
      Description copied from interface: Vector
      Get the value at position i.
      Specified by:
      get in interface Vector
      Parameters:
      index - the position of a vector entry
      Returns:
      v[i]
    • set

      public void set(int index, double value)
      Description copied from interface: Vector
      Change the value of an entry in this vector. This is the only method that may change the entries of a vector.
      Specified by:
      set in interface Vector
      Parameters:
      index - the index of the entry to change. The indices are counting from 1, NOT 0.
      value - the value to change to
    • iterator

      public Iterator<SparseVector.Entry> iterator()
      Specified by:
      iterator in interface Iterable<SparseVector.Entry>
    • add

      public Vector add(Vector that)
      Description copied from interface: Vector
      \(this + that\)
      Specified by:
      add in interface AbelianGroup<Vector>
      Specified by:
      add in interface Vector
      Parameters:
      that - a vector
      Returns:
      \(this + that\)
    • add

      public SparseVector add(SparseVector that)
    • minus

      public Vector minus(Vector that)
      Description copied from interface: Vector
      \(this - that\)
      Specified by:
      minus in interface AbelianGroup<Vector>
      Specified by:
      minus in interface Vector
      Parameters:
      that - a vector
      Returns:
      \(this - that\)
    • minus

      public SparseVector minus(SparseVector that)
    • multiply

      public SparseVector multiply(Vector that)
      Description copied from interface: Vector
      Multiply this by that, entry-by-entry.
      Specified by:
      multiply in interface Vector
      Parameters:
      that - a vector
      Returns:
      \(this \cdot that\)
    • multiply

      public SparseVector multiply(SparseVector that)
    • leftMultiply

      public Vector leftMultiply(Matrix A)
      Left multiplies a matrix. That is, A * x, where A is the matrix and x is this sparse vector. This may speed up the operation as there are fewer multiplications.
      Parameters:
      A - the matrix on the left
      Returns:
      the multiplication product
    • divide

      public Vector divide(Vector that)
      Description copied from interface: Vector
      Divide this by that, entry-by-entry.
      Specified by:
      divide in interface Vector
      Parameters:
      that - a vector
      Returns:
      \(this / that\)
    • add

      public Vector add(double c)
      Description copied from interface: Vector
      Add a constant to all entries in this vector.
      Specified by:
      add in interface Vector
      Parameters:
      c - a constant
      Returns:
      \(v + c\)
    • minus

      public Vector minus(double c)
      Description copied from interface: Vector
      Subtract a constant from all entries in this vector.
      Specified by:
      minus in interface Vector
      Parameters:
      c - a constant
      Returns:
      \(v - c\)
    • innerProduct

      public double innerProduct(Vector that)
      Description copied from interface: Vector
      Inner product in the Euclidean space is the dot product.
      Specified by:
      innerProduct in interface HilbertSpace<Vector,Real>
      Specified by:
      innerProduct in interface Vector
      Parameters:
      that - a vector
      Returns:
      \(this \cdot that\)
      See Also:
    • innerProduct

      public double innerProduct(SparseVector that)
    • pow

      public Vector pow(double c)
      Description copied from interface: Vector
      Take the exponentiation of all entries in this vector, entry-by-entry.
      Specified by:
      pow in interface Vector
      Parameters:
      c - a constant
      Returns:
      \(v ^ c\)
    • scaled

      public SparseVector scaled(double c)
      Description copied from interface: Vector
      Scale this vector by a constant, entry-by-entry. Here is a way to get a unit version of the vector:
      vector.scaled(1. / vector.norm())
      Specified by:
      scaled in interface Vector
      Parameters:
      c - a constant
      Returns:
      \(c \times this\)
    • scaled

      public SparseVector scaled(Real c)
      Description copied from interface: Vector
      Scale this vector by a constant, entry-by-entry. Here is a way to get a unit version of the vector:
      vector.scaled(1. / vector.norm())
      Specified by:
      scaled in interface Vector
      Specified by:
      scaled in interface VectorSpace<Vector,Real>
      Parameters:
      c - a constant
      Returns:
      \(c \times this\)
      See Also:
    • opposite

      public SparseVector opposite()
      Description copied from interface: Vector
      Get the opposite of this vector.
      Specified by:
      opposite in interface AbelianGroup<Vector>
      Specified by:
      opposite in interface Vector
      Returns:
      -v
      See Also:
    • norm

      public double norm()
      Description copied from interface: Vector
      Compute the length or magnitude or Euclidean norm of a vector, namely, \(\|v\|\).
      Specified by:
      norm in interface BanachSpace<Vector,Real>
      Specified by:
      norm in interface Vector
      Returns:
      the Euclidean norm
      See Also:
    • norm

      public double norm(double p)
      Description copied from interface: Vector
      Gets the \(L^p\)-norm \(\|v\|_p\) of this vector.
      Specified by:
      norm in interface Vector
      Parameters:
      p - p ≥ 1, or Double.POSITIVE_INFINITY or Double.NEGATIVE_INFINITY
      Returns:
      \(\|v\|_p\)
      See Also:
    • angle

      public double angle(Vector that)
      Description copied from interface: Vector
      Measure the angle, \(\theta\), between this and that. That is, \[ this \cdot that = \|this\| \times \|that\| \times \cos \theta \]
      Specified by:
      angle in interface HilbertSpace<Vector,Real>
      Specified by:
      angle in interface Vector
      Parameters:
      that - a vector
      Returns:
      the angle, \(\theta\), between this and that
    • ZERO

      public SparseVector ZERO()
      Description copied from interface: Vector
      Get a 0-vector that has the same length as this vector.
      Specified by:
      ZERO in interface AbelianGroup<Vector>
      Specified by:
      ZERO in interface Vector
      Returns:
      the 0-vector
    • toArray

      public double[] toArray()
      Description copied from interface: Vector
      Cast this vector into a 1D double[].
      Specified by:
      toArray in interface Vector
      Returns:
      a copy of all vector entries as a double[]
    • deepCopy

      public SparseVector deepCopy()
      Description copied from interface: DeepCopyable
      The implementation returns an instance created from this by the copy constructor of the class, or just this if the instance itself is immutable.
      Specified by:
      deepCopy in interface DeepCopyable
      Specified by:
      deepCopy in interface Vector
      Returns:
      an independent (deep) copy of the instance
    • nNonZeros

      public int nNonZeros()
      Description copied from interface: SparseStructure
      Get the number of non-zero entries in the structure.
      Specified by:
      nNonZeros in interface SparseStructure
      Returns:
      the number of non-zero entries in the structure
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • equals

      public boolean equals(Object obj)
      Overrides:
      equals in class Object