Package org.ojalgo.array
Class SparseArray<N extends java.lang.Comparable<N>>
- java.lang.Object
-
- org.ojalgo.array.BasicArray<N>
-
- org.ojalgo.array.SparseArray<N>
-
- All Implemented Interfaces:
Access1D<N>
,Access1D.Aggregatable<N>
,Access1D.Collectable<N,Mutate1D>
,Access1D.Visitable<N>
,Mutate1D
,Mutate1D.Fillable<N>
,Mutate1D.Modifiable<N>
,Structure1D
public final class SparseArray<N extends java.lang.Comparable<N>> extends BasicArray<N>
Only stores nonzero elements and/or elements specifically set by the user. The nonzero elements are stored internally in a
DenseArray
.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interface
SparseArray.NonzeroPrimitiveCallback
static interface
SparseArray.NonzeroReferenceTypeCallback<N extends java.lang.Comparable<N>>
static class
SparseArray.NonzeroView<N extends java.lang.Comparable<N>>
static class
SparseArray.SparseFactory<N extends java.lang.Comparable<N>>
-
Nested classes/interfaces inherited from class org.ojalgo.array.BasicArray
BasicArray.Factory<N extends java.lang.Comparable<N>>
-
Nested classes/interfaces inherited from interface org.ojalgo.structure.Access1D
Access1D.Aggregatable<N extends java.lang.Comparable<N>>, Access1D.Collectable<N extends java.lang.Comparable<N>,R extends Mutate1D>, Access1D.ElementView<N extends java.lang.Comparable<N>>, Access1D.SelectionView<N extends java.lang.Comparable<N>>, Access1D.Sliceable<N extends java.lang.Comparable<N>>, Access1D.Visitable<N extends java.lang.Comparable<N>>
-
Nested classes/interfaces inherited from interface org.ojalgo.structure.Mutate1D
Mutate1D.Fillable<N extends java.lang.Comparable<N>>, Mutate1D.Mixable<N extends java.lang.Comparable<N>>, Mutate1D.Modifiable<N extends java.lang.Comparable<N>>, Mutate1D.ModifiableReceiver<N extends java.lang.Comparable<N>>, Mutate1D.Receiver<N extends java.lang.Comparable<N>>, Mutate1D.Sortable
-
Nested classes/interfaces inherited from interface org.ojalgo.structure.Structure1D
Structure1D.BasicMapper<T>, Structure1D.IndexMapper<T>, Structure1D.IntIndex, Structure1D.Logical<S extends Structure1D,B extends Structure1D.Logical<S,B>>, Structure1D.LongIndex, Structure1D.LoopCallback
-
-
Field Summary
Fields Modifier and Type Field Description private static NumberContext
MATH_CONTEXT
private int
myActualLength
The actual number of nonzwero elementsprivate long
myCount
private DenseArray.Factory<N>
myDenseFactory
private GrowthStrategy
myGrowthStrategy
private long[]
myIndices
private DenseArray<N>
myValues
private N
myZeroNumber
private Scalar<N>
myZeroScalar
private double
myZeroValue
-
Constructor Summary
Constructors Constructor Description SparseArray(DenseArray.Factory<N> denseFactory, GrowthStrategy growthStrategy, long count)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
add(long index, double addend)
void
add(long index, float addend)
void
add(long index, java.lang.Comparable<?> addend)
void
axpy(double a, Mutate1D.Modifiable<?> y)
Will calculate y = y + a x, will add "a" times "this" to "y"(package private) long
capacity()
long
count()
The total number of elements in this structure.int
countNonzeros()
long
countZeros()
(package private) DenseArray<N>
densify()
double
dot(Access1D<?> vector)
Will calculate and return the dot product of this 1D-structure and another input 1D-vector.double
doubleValue(int index)
double
doubleValue(long index)
(package private) double
doubleValueInternally(int internalIndex)
protected void
exchange(long firstA, long firstB, long step, long count)
static <N extends java.lang.Comparable<N>>
SparseArray.SparseFactory<N>factory(DenseArray.Factory<N> denseFactory)
protected void
fill(long first, long limit, long step, N value)
protected void
fill(long first, long limit, long step, NullaryFunction<?> supplier)
void
fillAll(N value)
void
fillAll(NullaryFunction<?> supplier)
void
fillRange(long first, long limit, N value)
void
fillRange(long first, long limit, NullaryFunction<?> supplier)
(package private) long
firstIndex()
long
firstInRange(long rangeFirst, long rangeLimit)
N
get(long index)
(package private) int
getActualLength()
(package private) N
getInternally(int internalIndex)
(package private) DenseArray<N>
getValues()
(package private) Access1D<N>
getValues(long fromIncl, long toExcl)
(package private) int
index(long index)
long
indexOfLargest()
protected long
indexOfLargest(long first, long limit, long step)
(package private) java.util.stream.LongStream
indices()
(package private) long
lastIndex()
long
limitOfRange(long rangeFirst, long rangeLimit)
protected void
modify(long first, long limit, long step, BinaryFunction<N> function, Access1D<N> right)
protected void
modify(long first, long limit, long step, UnaryFunction<N> function)
protected void
modify(long first, long limit, long step, Access1D<N> left, BinaryFunction<N> function)
void
modifyAll(UnaryFunction<N> modifier)
void
modifyOne(long index, UnaryFunction<N> modifier)
SparseArray.NonzeroView<N>
nonzeros()
Similar toAccess1D.elements()
but avoids elements that are structurally known to be zero.(package private) void
put(long key, int index, double value)
(package private) void
put(long key, int index, N value)
(package private) void
remove(long externalIndex, int internalIndex)
void
reset()
Reset this mutable structure to some standard (all zeros) initial state.void
set(int index, double value)
void
set(long index, double value)
void
set(long index, float value)
void
set(long index, java.lang.Comparable<?> value)
int
size()
The total number of elements in this structure.void
supplyNonZerosTo(Mutate1D consumer)
private void
update(long externalIndex, int internalIndex, double value, boolean shouldStoreZero)
Will never remove anything - just insert or updateprivate void
update(long externalIndex, int internalIndex, java.lang.Comparable<?> value, boolean shouldStoreZero)
Will never remove anything - just insert or updateprotected void
visit(long first, long limit, long step, VoidFunction<N> visitor)
void
visitOne(long index, VoidFunction<N> visitor)
void
visitPrimitiveNonzerosInRange(long first, long limit, SparseArray.NonzeroPrimitiveCallback visitor)
void
visitRange(long first, long limit, VoidFunction<N> visitor)
void
visitReferenceTypeNonzerosInRange(long first, long limit, SparseArray.NonzeroReferenceTypeCallback<N> visitor)
-
Methods inherited from class org.ojalgo.array.BasicArray
aggregateRange, equals, factory, getMathType, hashCode, isPrimitive, modifyMatching, modifyMatching, modifyRange, supplyTo, toString, visitAll, wrapInArray1D, wrapInArray2D, wrapInArrayAnyD
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.ojalgo.structure.Access1D
asCollectable1D, asKeyed1D, byteValue, byteValue, elements, floatValue, floatValue, intValue, intValue, longValue, longValue, select, shortValue, shortValue, supplyTo, toRawCopy1D
-
Methods inherited from interface org.ojalgo.structure.Access1D.Aggregatable
aggregateAll
-
Methods inherited from interface org.ojalgo.structure.Access1D.Collectable
collect
-
Methods inherited from interface org.ojalgo.structure.Mutate1D
set, set, set, set, set, set, set, set, set
-
Methods inherited from interface org.ojalgo.structure.Mutate1D.Fillable
fillCompatible, fillMatching, fillMatching, fillMatching
-
Methods inherited from interface org.ojalgo.structure.Mutate1D.Modifiable
add, add, add, add
-
-
-
-
Field Detail
-
MATH_CONTEXT
private static final NumberContext MATH_CONTEXT
-
myActualLength
private int myActualLength
The actual number of nonzwero elements
-
myCount
private final long myCount
-
myDenseFactory
private final DenseArray.Factory<N extends java.lang.Comparable<N>> myDenseFactory
-
myGrowthStrategy
private final GrowthStrategy myGrowthStrategy
-
myIndices
private long[] myIndices
-
myValues
private DenseArray<N extends java.lang.Comparable<N>> myValues
-
myZeroValue
private final double myZeroValue
-
-
Constructor Detail
-
SparseArray
SparseArray(DenseArray.Factory<N> denseFactory, GrowthStrategy growthStrategy, long count)
-
-
Method Detail
-
factory
public static <N extends java.lang.Comparable<N>> SparseArray.SparseFactory<N> factory(DenseArray.Factory<N> denseFactory)
-
add
public void add(long index, java.lang.Comparable<?> addend)
-
add
public void add(long index, double addend)
-
add
public void add(long index, float addend)
-
axpy
public void axpy(double a, Mutate1D.Modifiable<?> y)
Description copied from interface:Access1D
Will calculate y = y + a x, will add "a" times "this" to "y"- Parameters:
a
- The scaley
- The "vector" to update
-
count
public long count()
Description copied from interface:Structure1D
The total number of elements in this structure.You only need to implement this method if the structure can contain more than Integer.MAX_VALUE elements.
-
countNonzeros
public int countNonzeros()
-
countZeros
public long countZeros()
-
dot
public double dot(Access1D<?> vector)
Description copied from interface:Access1D
Will calculate and return the dot product of this 1D-structure and another input 1D-vector.- Parameters:
vector
- Another 1D-structure- Returns:
- The dot product
-
doubleValue
public double doubleValue(int index)
-
doubleValue
public double doubleValue(long index)
-
fillAll
public void fillAll(N value)
-
fillAll
public void fillAll(NullaryFunction<?> supplier)
-
fillRange
public void fillRange(long first, long limit, N value)
-
fillRange
public void fillRange(long first, long limit, NullaryFunction<?> supplier)
-
firstInRange
public long firstInRange(long rangeFirst, long rangeLimit)
-
get
public N get(long index)
-
indexOfLargest
public long indexOfLargest()
- Specified by:
indexOfLargest
in interfaceAccess1D.Aggregatable<N extends java.lang.Comparable<N>>
- Overrides:
indexOfLargest
in classBasicArray<N extends java.lang.Comparable<N>>
-
limitOfRange
public long limitOfRange(long rangeFirst, long rangeLimit)
-
modifyAll
public void modifyAll(UnaryFunction<N> modifier)
- Specified by:
modifyAll
in interfaceMutate1D.Modifiable<N extends java.lang.Comparable<N>>
- Overrides:
modifyAll
in classBasicArray<N extends java.lang.Comparable<N>>
-
modifyOne
public void modifyOne(long index, UnaryFunction<N> modifier)
-
nonzeros
public SparseArray.NonzeroView<N> nonzeros()
Description copied from interface:Access1D
Similar toAccess1D.elements()
but avoids elements that are structurally known to be zero. (That does not eliminate all zero-values from this view.) With an arbitrary (dense) unstructured implementation theAccess1D.nonzeros()
andAccess1D.elements()
methods do the same thing! Only some specific implementations are able to actually exploit structure/sparsity to view fewer elements.
-
reset
public void reset()
Description copied from interface:Mutate1D
Reset this mutable structure to some standard (all zeros) initial state. It must still be usuable after this call, and the structure/size/shape must not change.
-
set
public void set(int index, double value)
-
set
public void set(long index, java.lang.Comparable<?> value)
-
set
public void set(long index, double value)
-
set
public void set(long index, float value)
-
size
public int size()
Description copied from interface:Structure1D
The total number of elements in this structure.
-
supplyNonZerosTo
public void supplyNonZerosTo(Mutate1D consumer)
-
visitOne
public void visitOne(long index, VoidFunction<N> visitor)
-
visitPrimitiveNonzerosInRange
public void visitPrimitiveNonzerosInRange(long first, long limit, SparseArray.NonzeroPrimitiveCallback visitor)
-
visitRange
public void visitRange(long first, long limit, VoidFunction<N> visitor)
- Specified by:
visitRange
in interfaceAccess1D.Visitable<N extends java.lang.Comparable<N>>
- Overrides:
visitRange
in classBasicArray<N extends java.lang.Comparable<N>>
-
visitReferenceTypeNonzerosInRange
public void visitReferenceTypeNonzerosInRange(long first, long limit, SparseArray.NonzeroReferenceTypeCallback<N> visitor)
-
update
private void update(long externalIndex, int internalIndex, java.lang.Comparable<?> value, boolean shouldStoreZero)
Will never remove anything - just insert or update
-
update
private void update(long externalIndex, int internalIndex, double value, boolean shouldStoreZero)
Will never remove anything - just insert or update
-
exchange
protected void exchange(long firstA, long firstB, long step, long count)
- Overrides:
exchange
in classBasicArray<N extends java.lang.Comparable<N>>
-
fill
protected void fill(long first, long limit, long step, N value)
- Overrides:
fill
in classBasicArray<N extends java.lang.Comparable<N>>
-
fill
protected void fill(long first, long limit, long step, NullaryFunction<?> supplier)
- Overrides:
fill
in classBasicArray<N extends java.lang.Comparable<N>>
-
indexOfLargest
protected long indexOfLargest(long first, long limit, long step)
- Overrides:
indexOfLargest
in classBasicArray<N extends java.lang.Comparable<N>>
-
modify
protected void modify(long first, long limit, long step, Access1D<N> left, BinaryFunction<N> function)
- Overrides:
modify
in classBasicArray<N extends java.lang.Comparable<N>>
-
modify
protected void modify(long first, long limit, long step, BinaryFunction<N> function, Access1D<N> right)
- Overrides:
modify
in classBasicArray<N extends java.lang.Comparable<N>>
-
modify
protected void modify(long first, long limit, long step, UnaryFunction<N> function)
- Overrides:
modify
in classBasicArray<N extends java.lang.Comparable<N>>
-
visit
protected void visit(long first, long limit, long step, VoidFunction<N> visitor)
- Overrides:
visit
in classBasicArray<N extends java.lang.Comparable<N>>
-
capacity
long capacity()
-
densify
DenseArray<N> densify()
-
doubleValueInternally
double doubleValueInternally(int internalIndex)
-
firstIndex
long firstIndex()
-
getActualLength
int getActualLength()
-
getInternally
N getInternally(int internalIndex)
-
getValues
DenseArray<N> getValues()
-
index
int index(long index)
-
indices
java.util.stream.LongStream indices()
-
lastIndex
long lastIndex()
-
put
void put(long key, int index, double value)
-
put
void put(long key, int index, N value)
-
remove
void remove(long externalIndex, int internalIndex)
-
-