Class DoubleVectorData
java.lang.Object
org.djunits.value.storage.Storage<DoubleVectorData>
org.djunits.value.vdouble.vector.data.DoubleVectorData
- All Implemented Interfaces:
Serializable
,Cloneable
- Direct Known Subclasses:
DoubleVectorDataDense
,DoubleVectorDataSparse
Stores the data for a DoubleVector and carries out basic operations.
Copyright (c) 2013-2024 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved.
BSD-style license. See DJUNITS License.
- Author:
- Alexander Verbraeck, Peter Knoppers
- See Also:
-
Field Summary
Modifier and TypeFieldDescriptionprotected static final int
Threshold to do parallel execution.protected double[]
The internal storage of the Vector; can be sparse or dense. -
Constructor Summary
ConstructorDescriptionDoubleVectorData
(StorageType storageType) Construct a new DoubleVectorData object. -
Method Summary
Modifier and TypeMethodDescriptionabstract DoubleVectorData
assign
(DoubleFunction doubleFunction) Apply an operation to each cell.(package private) abstract DoubleVectorData
assign
(DoubleFunction2 doubleFunction2, DoubleVectorData right) Apply a binary operation on a cell by cell basis.protected void
checkSizes
(DoubleVectorData other) Check the sizes of this data object and the other data object.protected boolean
Compare contents of a dense and a sparse vector.final DoubleVectorData
decrementBy
(DoubleVectorData right) Subtract a vector from this vector on a cell-by-cell basis.abstract DoubleVectorData
divide
(DoubleVectorData right) Divide two vectors on a cell-by-cell basis.final DoubleVectorData
divideBy
(DoubleVectorData right) Divide the values of a vector by the values of another vector on a cell-by-cell basis.boolean
abstract double[]
Create and return a dense copy of the data.abstract double
getSI
(int index) Retrieve the SI value of one element of this data.int
hashCode()
final DoubleVectorData
incrementBy
(DoubleVectorData right) Add a vector to this vector on a cell-by-cell basis.static DoubleVectorData
instantiate
(double[] values, Scale scale, StorageType storageType) Instantiate a DoubleVectorData with the right data type.static DoubleVectorData
instantiate
(List<? extends Number> values, Scale scale, StorageType storageType) Instantiate a DoubleVectorData with the right data type.static DoubleVectorData
instantiate
(Map<Integer, ? extends Number> valueMap, int size, Scale scale, StorageType storageType) Instantiate a DoubleVectorData with the right data type.static <U extends Unit<U>,
S extends DoubleScalar<U, S>>
DoubleVectorDatainstantiate
(S[] values, StorageType storageType) Instantiate a DoubleVectorData with the right data type.abstract DoubleVectorData
minus
(DoubleVectorData right) Subtract two vectors on a cell-by-cell basis.final DoubleVectorData
multiplyBy
(DoubleVectorData right) Multiply a vector with the values of another vector on a cell-by-cell basis.abstract DoubleVectorData
plus
(DoubleVectorData right) Add two vectors on a cell-by-cell basis.abstract void
setSI
(int index, double valueSI) Sets a value at the index in the vector.abstract int
size()
Retrieve the size of the vector.abstract DoubleVectorData
times
(DoubleVectorData right) Multiply two vectors on a cell-by-cell basis.abstract DoubleVectorDataDense
toDense()
Return the densely stored equivalent of this data.abstract DoubleVectorDataSparse
toSparse()
Return the sparsely stored equivalent of this data.toString()
final double
zSum()
Compute and return the sum of all values.Methods inherited from class org.djunits.value.storage.Storage
cardinality, copy, getStorageType, isDense, isSparse
-
Field Details
-
vectorSI
protected double[] vectorSIThe internal storage of the Vector; can be sparse or dense. -
PARALLEL_THRESHOLD
protected static final int PARALLEL_THRESHOLDThreshold to do parallel execution.- See Also:
-
-
Constructor Details
-
DoubleVectorData
DoubleVectorData(StorageType storageType) Construct a new DoubleVectorData object.- Parameters:
storageType
- StorageType; the data type.
-
-
Method Details
-
instantiate
Instantiate a DoubleVectorData with the right data type.- Parameters:
values
- double[]; the (SI) values to storescale
- Scale; the scale of the unit to use for conversion to SIstorageType
- StorageType; the data type to use- Returns:
- DoubleVectorData; the DoubleVectorData with the right data type
- Throws:
NullPointerException
- when values are null, or storageType is null
-
instantiate
public static DoubleVectorData instantiate(List<? extends Number> values, Scale scale, StorageType storageType) Instantiate a DoubleVectorData with the right data type.- Parameters:
values
- List<? extends Number>; the values to store; can be either list of numbers, or a list of scalarsscale
- Scale; the scale of the unit to use for conversion to SIstorageType
- StorageType; the data type to use- Returns:
- DoubleVectorData; the DoubleVectorData with the right data type
- Throws:
NullPointerException
- when list is null, or storageType is null
-
instantiate
public static <U extends Unit<U>,S extends DoubleScalar<U, DoubleVectorData instantiateS>> (S[] values, StorageType storageType) Instantiate a DoubleVectorData with the right data type.- Type Parameters:
U
- the unit typeS
- the corresponding scalar type- Parameters:
values
- S[]; the values to storestorageType
- StorageType; the data type to use- Returns:
- DoubleVectorData; the DoubleVectorData with the right data type
- Throws:
NullPointerException
- when values is null, or storageType is null
-
instantiate
public static DoubleVectorData instantiate(Map<Integer, ? extends Number> valueMap, int size, Scale scale, StorageType storageType) throws IllegalArgumentException, IndexOutOfBoundsExceptionInstantiate a DoubleVectorData with the right data type.- Parameters:
valueMap
- Map<Integer,? extends Number>; the Number or Scalar values to storesize
- int; the size of the vector to pad with 0 after last entry in mapscale
- Scale; the scale of the unit to use for conversion to SIstorageType
- StorageType; the data type to use- Returns:
- DoubleVectorData; the DoubleVectorData with the right data type
- Throws:
IllegalArgumentException
- when length < 0NullPointerException
- when values is null, or storageType is nullIndexOutOfBoundsException
- when one of the keys is out of range with the given size
-
size
public abstract int size()Retrieve the size of the vector.- Returns:
- int; the size of the vector
-
toDense
Return the densely stored equivalent of this data.- Returns:
- DoubleVectorDataDense; the dense transformation of this data
-
toSparse
Return the sparsely stored equivalent of this data.- Returns:
- DoubleVectorDataSparse; the sparse transformation of this data
-
getSI
public abstract double getSI(int index) Retrieve the SI value of one element of this data.- Parameters:
index
- int; the index to get the value for- Returns:
- double; the value at the index
-
setSI
public abstract void setSI(int index, double valueSI) Sets a value at the index in the vector.- Parameters:
index
- int; the index to set the value forvalueSI
- double; the value at the index
-
zSum
public final double zSum()Compute and return the sum of all values.- Returns:
- double; the sum of the values of all cells
-
getDenseVectorSI
public abstract double[] getDenseVectorSI()Create and return a dense copy of the data.- Returns:
- double[]; a safe copy of VectorSI
-
checkSizes
Check the sizes of this data object and the other data object.- Parameters:
other
- DoubleVectorData; the other data object- Throws:
ValueRuntimeException
- if vectors have different lengths
-
assign
Apply an operation to each cell.- Parameters:
doubleFunction
- DoubleFunction; the operation to apply- Returns:
- DoubleVectorData; this (modified) double vector data object
-
assign
abstract DoubleVectorData assign(DoubleFunction2 doubleFunction2, DoubleVectorData right) throws ValueRuntimeException Apply a binary operation on a cell by cell basis.- Parameters:
doubleFunction2
- DoubleFunction2; the binary operation to applyright
- DoubleVectorData; the right operand for the binary operation- Returns:
- DoubleVectorData; this (modified) double vector data object
- Throws:
ValueRuntimeException
- when the sizes of the vectors do not match
-
plus
Add two vectors on a cell-by-cell basis. If both vectors are sparse, a sparse vector is returned, otherwise a dense vector is returned. Neither of the two objects is changed.- Parameters:
right
- DoubleVectorData; the other data object to add- Returns:
- DoubleVectorData; the sum of this data object and the other data object as a new data object
- Throws:
ValueRuntimeException
- if vectors have different lengths
-
incrementBy
Add a vector to this vector on a cell-by-cell basis. The type of vector (sparse, dense) stays the same.- Parameters:
right
- DoubleVectorData; the other data object to add- Returns:
- DoubleVectorData; this modified double vector data object
- Throws:
ValueRuntimeException
- if vectors have different lengths
-
minus
Subtract two vectors on a cell-by-cell basis. If both vectors are sparse, a sparse vector is returned, otherwise a dense vector is returned. Neither of the two objects is changed.- Parameters:
right
- DoubleVectorData; the other data object to subtract- Returns:
- DoubleVectorData; the difference of this data object and the other data object as a new data object
- Throws:
ValueRuntimeException
- if vectors have different lengths
-
decrementBy
Subtract a vector from this vector on a cell-by-cell basis. The type of vector (sparse, dense) stays the same.- Parameters:
right
- DoubleVectorData; the other data object to subtract- Returns:
- DoubleVectorData; this modified double vector data object
- Throws:
ValueRuntimeException
- if vectors have different lengths
-
times
Multiply two vectors on a cell-by-cell basis. If both vectors are dense, a dense vector is returned, otherwise a sparse vector is returned.- Parameters:
right
- DoubleVectorData; the other data object to multiply with- Returns:
- DoubleVectorData; a new double vector data store holding the result of the multiplications
- Throws:
ValueRuntimeException
- if vectors have different lengths
-
multiplyBy
Multiply a vector with the values of another vector on a cell-by-cell basis. The type of vector (sparse, dense) stays the same.- Parameters:
right
- DoubleVectorData; the other data object to multiply with- Returns:
- DoubleVectordata; this modified double vector data store
- Throws:
ValueRuntimeException
- if vectors have different lengths
-
divide
Divide two vectors on a cell-by-cell basis. If this vector is sparse andright
is dense, a sparse vector is returned, otherwise a dense vector is returned.- Parameters:
right
- DoubleVectorData; the other data object to divide by- Returns:
- DoubleVectorData; the ratios of the values of this data object and the other data object
- Throws:
ValueRuntimeException
- if vectors have different lengths
-
divideBy
Divide the values of a vector by the values of another vector on a cell-by-cell basis. The type of vector (sparse, dense) stays the same.- Parameters:
right
- DoubleVectorData; the other data object to divide by- Returns:
- DoubleVectorData; this modified double vector data store
- Throws:
ValueRuntimeException
- if vectors have different lengths
-
hashCode
public int hashCode() -
compareDenseVectorWithSparseVector
protected boolean compareDenseVectorWithSparseVector(DoubleVectorDataDense dm, DoubleVectorDataSparse sm) Compare contents of a dense and a sparse vector.- Parameters:
dm
- DoubleVectorDataDense; the dense vectorsm
- DoubleVectorDataSparse; the sparse vector- Returns:
- boolean; true if the contents are equal
-
equals
-
toString
-