Skip to content

Commit c163a7a

Browse files
authored
Merge pull request PyDMD#497 from roxyboy/par_amp
Add partial_amplitudes as an output of mrDMD
2 parents 9307c5a + 2fb0780 commit c163a7a

File tree

3 files changed

+42
-1
lines changed

3 files changed

+42
-1
lines changed

pydmd/mrdmd.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,26 @@ def partial_eigs(self, level, node=None):
386386
[self.dmd_tree[level, leaf].eigs for leaf in leaves]
387387
)
388388

389+
def partial_amplitudes(self, level, node=None):
390+
"""
391+
Return the amplitudes of the specific `level` and of the specific
392+
`node`; if `node` is not specified, the method returns the amplitudes
393+
of the given `level` (all the nodes).
394+
395+
:param int level: the index of the level from where the amplitudes are
396+
extracted.
397+
:param int node: the index of the node from where the amplitudes are
398+
extracted; if None, the amplitudes are extracted from all the
399+
nodes of the given level. Default is None.
400+
401+
:return: the selected eigs
402+
:rtype: numpy.ndarray
403+
"""
404+
leaves = self.dmd_tree.index_leaves(level) if node is None else [node]
405+
return np.concatenate(
406+
[self.dmd_tree[level, leaf].amplitudes for leaf in leaves]
407+
)
408+
389409
def partial_reconstructed_data(self, level, node=None):
390410
"""
391411
Return the reconstructed data computed using the modes and the time

pydmd/rdmd.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
Systems, 18, 2019.
88
"""
99

10-
1110
from .cdmd import CDMD
1211
from .utils import compute_rqb
1312

tests/test_mrdmd.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,28 @@ def test_partial_eigs2():
233233
assert peigs.shape == (rank,)
234234

235235

236+
def test_partial_eigs1():
237+
max_level = 5
238+
level = 2
239+
rank = 2
240+
dmd = DMD(svd_rank=rank)
241+
mrdmd = MrDMD(dmd, max_level=max_level, max_cycles=2)
242+
mrdmd.fit(X=sample_data)
243+
pamps = mrdmd.partial_amplitudes(level)
244+
assert pamps.shape == (rank * 2**level,)
245+
246+
247+
def test_partial_eigs2():
248+
max_level = 5
249+
level = 2
250+
rank = 2
251+
dmd = DMD(svd_rank=rank)
252+
mrdmd = MrDMD(dmd, max_level=6, max_cycles=2)
253+
mrdmd.fit(X=sample_data)
254+
pamps = mrdmd.partial_amplitudes(level, 3)
255+
assert pamps.shape == (rank,)
256+
257+
236258
def test_partial_reconstructed1():
237259
max_level = 5
238260
level = 2

0 commit comments

Comments
 (0)