How to add instances of DependentVariable class¶
In the previous two sections, we learnt how to create a new dataset and add dimensions to a dataset. In this example, we will see how to add dependent variables to the dataset. Let’s start by creating a new dataset,
>>> import csdmpy as cp
>>> new_data = cp.new(description='A new test dependent variables dataset')
An instance of the DependentVariable class is added using the
add_dependent_variable()
method of the CSDM
instance. There are two subtypes of DependentVariable class:
InternalDependentVariable: We refer an instance of the DependentVariable as internal when the components of the dependent variable are listed along with the other metadata specifying the dependent variable.
ExternalDependentVariable: We refer an instance of the DependentVariable as external when the components of the dependent variable are stored in an external file as binary data either locally or at a remote server.
In version 1.0, the CSD model allows dependent variables with quantity types as
scalar
vector_n
pixel_n
matrix_n_m
symmetric_matrix_n
See also
Read more about DependentVariable API.
Adding a scalar dependent variables¶
A dependent variable with quantity type scalar is a one-component dependent variable. Consider the following python dictionary
>>> d0 = {
... 'type': 'internal',
... 'quantity_type': 'scalar',
... 'description': 'This is an internal scalar dependent variable',
... 'unit': 'cm',
... 'components': [np.arange(100)]
... }
Here, the components are listed as the value of the
components
keyword, and
therefore, the value of the type keyword is specified as internal.
Note
The value of the components attribute is listed as a list of numpy array.
In csdmpy, the first dimension is reserved for the components. Since this
example has only one component, we specify it as a list of numpy array.
Alternatively, one could also assign
np.arange(100).reshape(np.newaxis, 100)
as the value of the components
attribute.
To add a dependent variable to the new_data
instance, use the
add_dependent_variable()
method as
>>> new_data.add_dependent_variable(d0)
This will generate and add a DependentVariable object to the list of dependent variables, thereby creating a 0D{1} dataset. The data structure after adding the dependent variable is
>>> print(new_data.data_structure)
{
"csdm": {
"version": "1.0",
"description": "A new test dependent variables dataset",
"dimensions": [],
"dependent_variables": [
{
"type": "internal",
"description": "This is an internal scalar dependent variable",
"unit": "cm",
"quantity_name": "length",
"numeric_type": "int64",
"quantity_type": "scalar",
"components": [
[
"0, 1, ..., 98, 99"
]
]
}
]
}
}
Adding a multi-component dependent variables¶
In this next example, we demostrate how to add a dependent variable with
multiple components. This time we use keywords as the argument of the
add_dependent_variable()
method to add a new
dependent variable.
>>> new_data.add_dependent_variable(
... type='internal',
... description='This is an internal vector dependent variable',
... quantity_type='vector_3',
... unit='kg * m / s^2',
... components=np.arange(300, dtype='complex64').reshape(3,100)
... )
Notice, the value of the components keyword is a numpy array of shape 3 x 100, where 3 is the number of components and 100 is the number of points per component. Here, we specify, vector_3 as the value of the quantity_type, indicating that the three components of the dependent variable should be interpretted as vector dataset. Users may, however, substitute this value with any valid quantity_type consistent with the number of components. For example, the above dataset may also be interpretted as an image data if quantity type is given as pixel_3.
The data structure after adding the above dependent variable is
>>> print(new_data.data_structure)
{
"csdm": {
"version": "1.0",
"description": "A new test dependent variables dataset",
"dimensions": [],
"dependent_variables": [
{
"type": "internal",
"description": "This is an internal scalar dependent variable",
"unit": "cm",
"quantity_name": "length",
"numeric_type": "int64",
"quantity_type": "scalar",
"components": [
[
"0, 1, ..., 98, 99"
]
]
},
{
"type": "internal",
"description": "This is an internal vector dependent variable",
"unit": "kg * m * s^-2",
"quantity_name": "force",
"numeric_type": "complex64",
"quantity_type": "vector_3",
"components": [
[
"0j, (1+0j), ..., (98+0j), (99+0j)"
],
[
"(100+0j), (101+0j), ..., (198+0j), (199+0j)"
],
[
"(200+0j), (201+0j), ..., (298+0j), (299+0j)"
]
]
}
]
}
}