Source code for mrinversion.linear_model.tsvd_compression

import csdmpy as cp

from mrinversion.linear_model.linear_inversion import reduced_subspace_kernel_and_data
from mrinversion.linear_model.linear_inversion import TSVD


[docs]class TSVDCompression: """SVD compression. Args: K: The kernel. s: The data. r: The number of singular values used in data compression. Attributes ---------- truncation_index: int The number of singular values retained. compressed_K: ndarray The compressed kernel. compressed_s: ndarray of CSDM object The compressed data. """ def __init__(self, K, s, r=None): U, S, VT, r_ = TSVD(K) if r is None: r = r_ self.truncation_index = r signal = s.y[0].components[0].T if isinstance(s, cp.CSDM) else s ( self.compressed_K, compressed_signal, projectedSignal, __, # guess_solution, ) = reduced_subspace_kernel_and_data(U[:, :r], S[:r], VT[:r, :], signal) factor = signal.size / compressed_signal.size print(f"compression factor = {factor}") self.filtered_s = projectedSignal self.compressed_s = compressed_signal if isinstance(s, cp.CSDM): self.compressed_s = cp.as_csdm(self.compressed_s.T.copy()) self.filtered_s = cp.as_csdm(self.filtered_s.T.copy()) if len(s.x) > 1: self.compressed_s.x[1] = s.x[1] self.filtered_s.x[1] = s.x[1]