Generating DependentVariable objects

A DependentVariable is where the responses of the multi-dimensional dataset reside. There are two types of DependentVariable objects, internal and external. In this section, we show how to generate DependentVariable objects of both types.

InternalDependentVariable

Single component dependent variable

Using the DependentVariable class.

>>> dv1 = cp.DependentVariable(
...     type="internal",
...     quantity_type="scalar",
...     components=np.arange(10000),
...     unit="J",
...     description="A sample internal dependent variable.",
... )
>>> print(dv1)
DependentVariable(
[[   0    1    2 ... 9997 9998 9999]] J, quantity_type=scalar, numeric_type=int64)

Using NumPy array

Use the as_dependent_variable() method to convert a NumPy array into a DependentVariable object. Note, this method returns a view of the NumPy array as the DependentVariable object.

>>> dv1 = cp.as_dependent_variable(np.arange(10000).astype(np.complex64), unit="J")
>>> print(dv1)
DependentVariable(
[[0.000e+00+0.j 1.000e+00+0.j 2.000e+00+0.j ... 9.997e+03+0.j
  9.998e+03+0.j 9.999e+03+0.j]] J, quantity_type=scalar, numeric_type=complex64)

You may additionally provide the quantity_type for the dependent variable,

>>> dv2 = cp.as_dependent_variable(
...     np.arange(10000).astype(np.complex64), quantity_type="pixel_1"
... )
>>> print(dv2)
DependentVariable(
[[0.000e+00+0.j 1.000e+00+0.j 2.000e+00+0.j ... 9.997e+03+0.j
  9.998e+03+0.j 9.999e+03+0.j]], quantity_type=pixel_1, numeric_type=complex64)

Multi-component dependent variable

To generate a multi-component DependentVariable object, add an appropriate quantity_type value, see QuantityType for details.

Using the DependentVariable class.

>>> dv1 = cp.DependentVariable(
...     type="internal",
...     quantity_type="vector_2",
...     components=np.arange(10000),
...     unit="J",
...     description="A sample internal dependent variable.",
... )
>>> print(dv1)
DependentVariable(
[[   0    1    2 ... 4997 4998 4999]
 [5000 5001 5002 ... 9997 9998 9999]] J, quantity_type=vector_2, numeric_type=int64)

The above example generates a two-component dependent variable.

Using NumPy array

>>> dv1 = cp.as_dependent_variable(
...     np.arange(9000).astype(np.complex64), unit="m/s", quantity_type="symmetric_matrix_3"
... )
>>> print(dv1)
DependentVariable(
[[0.000e+00+0.j 1.000e+00+0.j 2.000e+00+0.j ... 1.497e+03+0.j
  1.498e+03+0.j 1.499e+03+0.j]
 [1.500e+03+0.j 1.501e+03+0.j 1.502e+03+0.j ... 2.997e+03+0.j
  2.998e+03+0.j 2.999e+03+0.j]
 [3.000e+03+0.j 3.001e+03+0.j 3.002e+03+0.j ... 4.497e+03+0.j
  4.498e+03+0.j 4.499e+03+0.j]
 [4.500e+03+0.j 4.501e+03+0.j 4.502e+03+0.j ... 5.997e+03+0.j
  5.998e+03+0.j 5.999e+03+0.j]
 [6.000e+03+0.j 6.001e+03+0.j 6.002e+03+0.j ... 7.497e+03+0.j
  7.498e+03+0.j 7.499e+03+0.j]
 [7.500e+03+0.j 7.501e+03+0.j 7.502e+03+0.j ... 8.997e+03+0.j
  8.998e+03+0.j 8.999e+03+0.j]] m / s, quantity_type=symmetric_matrix_3, numeric_type=complex64)

The above example generates a six-component dependent variable.

Note

For multi-component DependentVariable objects, the size of the NumPy array must be an integer multiple of the total number of components.

>>> d1 = cp.as_dependent_variable(np.arange(127), quantity_type="pixel_2")  
ValueError: cannot reshape array of size 127 into shape (2,63)

Notice in the above examples, we use a one-dimensional NumPy array to generate a DependentVariable object. If a multi-dimensional NumPy array is given as the argument, the array will be raveled (flattened) before returning the DependentVariable object. Note, in the core scientific dataset model, the DependentVariable objects only contain information about the number of components and not the dimensions. For example, consider the following.

>>> d2 = cp.as_dependent_variable(
...     np.arange(6000).reshape(10, 20, 30), quantity_type="vector_2"
... )
>>> print(d2)
DependentVariable(
[[   0    1    2 ... 2997 2998 2999]
 [3000 3001 3002 ... 5997 5998 5999]], quantity_type=vector_2, numeric_type=int64)

Here, a three-dimensional Numpy array is given as the argument with a quantity_type of vector_2. The DependentVariable object generated from this array contains two-components by appropriately flattening the input array.

ExternalDependentVariable

The ExternalDependentVariable objects are generated similar to the InternalDependentVariable object. The only difference is that the components of the dependent variable are located at a remote and local address.

Using the DependentVariable class.

>>> dv = cp.DependentVariable(
...     type="external",
...     quantity_type="scalar",
...     unit="J",
...     components_url="address to the binary file.",
...     numeric_type="int64",
...     description="A sample internal dependent variable.",
... )  

A DependentVariable of type external is useful for data serialization. When using with csdmpy, all instances of the external dependent variable objects are set as internal after downloading the components from the components_url.