DMDBase¶
Base module for the DMD: fit method must be implemented in inherited classes

class
DMDBase
(svd_rank=0, tlsq_rank=0, exact=False, opt=False, rescale_mode=None, forward_backward=False, sorted_eigs=False, tikhonov_regularization=None)[source] Bases:
object
Dynamic Mode Decomposition base class.
 Parameters
svd_rank (int or float) – the rank for the truncation; If 0, the method computes the optimal rank and uses it for truncation; if positive interger, the method uses the argument for the truncation; if float between 0 and 1, the rank is the number of the biggest singular values that are needed to reach the ‘energy’ specified by svd_rank; if 1, the method does not compute truncation.
tlsq_rank (int) – rank truncation computing Total Least Square. Default is 0, that means no truncation.
exact (bool) – flag to compute either exact DMD or projected DMD. Default is False.
opt (bool or int) – If True, amplitudes are computed like in optimized DMD (see
_compute_amplitudes()
for reference). If False, amplitudes are computed following the standard algorithm. If opt is an integer, it is used as the (temporal) index of the snapshot used to compute DMD modes amplitudes (following the standard algorithm). The reconstruction will generally be better in time instants near the chosen snapshot; however increasing opt may lead to wrong results when the system presents small eigenvalues. For this reason a manual selection of the number of eigenvalues considered for the analyisis may be needed (check svd_rank). Also setting svd_rank to a value between 0 and 1 may give better results. Default is False.rescale_mode ({'auto'} or None or numpy.ndarray) – Scale Atilde as shown in 10.1016/j.jneumeth.2015.10.010 (section 2.4) before computing its eigendecomposition. None means no rescaling, ‘auto’ means automatic rescaling using singular values, otherwise the scaling factors.
forward_backward (bool) – If True, the lowrank operator is computed like in fbDMD (reference: https://arxiv.org/abs/1507.02264). Default is False.
sorted_eigs ({'real', 'abs'} or False) – Sort eigenvalues (and modes/dynamics accordingly) by magnitude if sorted_eigs=’abs’, by real part (and then by imaginary part to break ties) if sorted_eigs=’real’. Default: False.
tikhonov_regularization (int or float) – Tikhonov parameter for the regularization. If None, no regularization is applied, if float, it is used as the \lambda tikhonov parameter.
 Variables
original_time (dict) –
dictionary that contains information about the time window where the system is sampled:
t0 is the time of the first input snapshot;
tend is the time of the last input snapshot;
dt is the delta time between the snapshots.
dmd_time (dict) –
dictionary that contains information about the time window where the system is reconstructed:
t0 is the time of the first approximated solution;
tend is the time of the last approximated solution;
dt is the delta time between the approximated solutions.

static
_col_major_2darray
(X)[source] Private method that takes as input the snapshots and stores them into a 2D matrix, by column. If the input data is already formatted as 2D array, the method saves it, otherwise it also saves the original snapshots shape and reshapes the snapshots.
 Parameters
X (int or numpy.ndarray) – the input snapshots.
 Returns
the 2D matrix that contains the flatten snapshots, the shape of original snapshots.
 Return type
numpy.ndarray, tuple

_compute_amplitudes
()[source] Compute the amplitude coefficients. If self.opt is False the amplitudes are computed by minimizing the error between the modes and the first snapshot; if self.opt is True the amplitudes are computed by minimizing the error between the modes and all the snapshots, at the expense of bigger computational cost.
This method uses the class variables self._snapshots (for the snapshots), self.modes and self.eigs.
 Returns
the amplitudes array
 Return type
References for optimal amplitudes: Jovanovic et al. 2014, Sparsitypromoting dynamic mode decomposition, https://halpolytechnique.archivesouvertes.fr/hal00995141/document

_enforce_ratio
(goal_ratio, supx, infx, supy, infy)[source] Computes the right value of supx,infx,supy,infy to obtain the desired ratio in
plot_eigs()
. Ratio is defined asdx = supx  infx dy = supy  infy max(dx,dy) / min(dx,dy)
 Parameters
 Return tuple
a tuple which contains the updated values of supx,infx,supy,infy in this order.

_optimal_dmd_matrices
()[source]

_plot_limits
(narrow_view)[source]

_set_initial_time_dictionary
(time_dict)[source] Set the initial values for the class fields time_dict and original_time. This is usually called in fit() and never again.
 Parameters
time_dict (dict) – Initial time dictionary for this DMD instance.

_translate_eigs_exponent
(tpow)[source] Transforms the exponent of the eigenvalues in the dynamics formula according to the selected value of self.opt (check the documentation for opt in
__init__
).

allocate_proxy
()[source]

property
amplitudes
Get the coefficients that minimize the error between the original system and the reconstructed one. For futher information, see dmdbase._compute_amplitudes.
 Returns
the array that contains the amplitudes coefficient.
 Return type

property
atilde
Get the reduced Koopman operator A, called A tilde.
 Returns
the reduced Koopman operator A.
 Return type

property
dmd_time
A dictionary which contains information about the time window used to reconstruct/predict using this DMD instance. By default this is equal to
original_time()
.Inside the dictionary:
Key
Value
t0
Time of the first output snapshot.
tend
Time of the last output snapshot.
dt
Timestep between two snapshots.
 Returns
A dict which contains info about the input time frame.
 Return type

property
dmd_timesteps
Get the timesteps of the reconstructed states.
 Returns
the time intervals of the original snapshots.
 Return type

property
dynamics
Get the time evolution of each mode.
\mathbf{x}(t) \approx \sum_{k=1}^{r} \boldsymbol{\phi}_{k} \exp \left( \omega_{k} t \right) b_{k} = \sum_{k=1}^{r} \boldsymbol{\phi}_{k} \left( \lambda_{k} \right)^{\left( t / \Delta t \right)} b_{k}
 Returns
the matrix that contains all the time evolution, stored by row.
 Return type

property
eigs
Get the eigenvalues of A tilde.
 Returns
the eigenvalues from the eigendecomposition of atilde.
 Return type

property
exact

fit
(X)[source] Abstract method to fit the snapshots matrices.
Not implemented, it has to be implemented in subclasses.

property
fitted
Check whether this DMD instance has been fitted.
 Returns
True is the instance has been fitted, False otherwise.
 Return type

property
forward_backward

property
frequency
Get the amplitude spectrum.
 Returns
the array that contains the frequencies of the eigenvalues.
 Return type

property
growth_rate
Get the growth rate values relative to the modes.
 Returns
the Floquet values
 Return type

static
load
(fname)[source] Load the object from fname using the pickle module.
 Returns
The ReducedOrderModel loaded
Example:
>>> from pydmd import DMD >>> dmd = DMD.load('pydmd.dmd') >>> print(dmd.reconstructed_data)

property
modes
Get the matrix containing the DMD modes, stored by column.
 Returns
the matrix containing the DMD modes.
 Return type

property
modes_activation_bitmask
Get the bitmask which controls which DMD modes are enabled at the moment in this DMD instance.
The DMD instance must be fitted before this property becomes valid. After
fit()
is called, the defalt value of modes_activation_bitmask is an array of True values of the same shape ofamplitudes()
.The array returned is readonly (this allow us to react appropriately to changes in the bitmask). In order to modify the bitmask you need to set the field to a brandnew value (see example below).
Example:
>>> # this is an error >>> dmd.modes_activation_bitmask[[1,2]] = False ValueError: assignment destination is readonly >>> tmp = np.array(dmd.modes_activation_bitmask) >>> tmp[[1,2]] = False >>> dmd.modes_activation_bitmask = tmp
 Returns
The DMD modes activation bitmask.
 Return type

property
operator
Get the instance of DMDOperator.
 Returns
the instance of DMDOperator
 Return type
DMDOperator

property
opt

property
original_time
A dictionary which contains information about the time window used to fit this DMD instance.
Inside the dictionary:
Key
Value
t0
Time of the first input snapshot (0 by default).
tend
Time of the last input snapshot (usually corresponds to the number of snapshots).
dt
Timestep between two snapshots (1 by default).
 Returns
A dict which contains info about the input time frame.
 Return type

property
original_timesteps
Get the timesteps of the original snapshot.
 Returns
the time intervals of the original snapshots.
 Return type

plot_eigs
(show_axes=True, show_unit_circle=True, figsize=(8, 8), title='', narrow_view=False, dpi=None, filename=None)[source] Plot the eigenvalues. :param bool show_axes: if True, the axes will be showed in the plot.
Default is True.
 Parameters
show_unit_circle (bool) – if True, the circle with unitary radius and center in the origin will be showed. Default is True.
figsize (tuple(int,int)) – tuple in inches defining the figure size. Default is (8, 8).
title (str) – title of the plot.
bool (narrow_view) – if True, the plot will show only the smallest rectangular area which contains all the eigenvalues, with a padding of 0.05. Not compatible with show_axes=True. Default is False.
int (dpi) – If not None, the given value is passed to
plt.figure
.filename (str) – if specified, the plot is saved at filename.

plot_modes_2D
(index_mode=None, filename=None, x=None, y=None, order='C', figsize=(8, 8))[source] Plot the DMD Modes.
 Parameters
index_mode (int or sequence(int)) – the index of the modes to plot. By default, all the modes are plotted.
filename (str) – if specified, the plot is saved at filename.
x (numpy.ndarray) – domain abscissa.
y (numpy.ndarray) – domain ordinate
order ({'C', 'F', 'A'}, default 'C'.) – read the elements of snapshots using this index order, and place the elements into the reshaped array using this index order. It has to be the same used to store the snapshot. ‘C’ means to read/ write the elements using Clike index order, with the last axis index changing fastest, back to the first axis index changing slowest. ‘F’ means to read / write the elements using Fortranlike index order, with the first index changing fastest, and the last index changing slowest. Note that the ‘C’ and ‘F’ options take no account of the memory layout of the underlying array, and only refer to the order of indexing. ‘A’ means to read / write the elements in Fortranlike index order if a is Fortran contiguous in memory, Clike order otherwise.
figsize (tuple(int,int)) – tuple in inches defining the figure size. Default is (8, 8).

plot_snapshots_2D
(index_snap=None, filename=None, x=None, y=None, order='C', figsize=(8, 8))[source] Plot the snapshots.
 Parameters
index_snap (int or sequence(int)) – the index of the snapshots to plot. By default, all the snapshots are plotted.
filename (str) – if specified, the plot is saved at filename.
x (numpy.ndarray) – domain abscissa.
y (numpy.ndarray) – domain ordinate
order ({'C', 'F', 'A'}, default 'C'.) – read the elements of snapshots using this index order, and place the elements into the reshaped array using this index order. It has to be the same used to store the snapshot. ‘C’ means to read/ write the elements using Clike index order, with the last axis index changing fastest, back to the first axis index changing slowest. ‘F’ means to read / write the elements using Fortranlike index order, with the first index changing fastest, and the last index changing slowest. Note that the ‘C’ and ‘F’ options take no account of the memory layout of the underlying array, and only refer to the order of indexing. ‘A’ means to read / write the elements in Fortranlike index order if a is Fortran contiguous in memory, Clike order otherwise.
figsize (tuple(int,int)) – tuple in inches defining the figure size. Default is (8, 8).

property
reconstructed_data
Get the reconstructed data.
 Returns
the matrix that contains the reconstructed snapshots.
 Return type

property
rescale_mode

save
(fname)[source] Save the object to fname using the pickle module.
 Parameters
fname (str) – the name of file where the reduced order model will be saved.
Example:
>>> from pydmd import DMD >>> dmd = DMD(...) # Construct here the rom >>> dmd.fit(...) >>> dmd.save('pydmd.dmd')

property
snapshots
Get the original input data.
 Returns
the matrix that contains the original snapshots.
 Return type

property
svd_rank

property
tlsq_rank