TimeSeriesMatrix

Stability: Stable

What it is

Use TimeSeriesMatrix when channels share one time axis and you want matrix-wide FFT, PSD, coherence, or preprocessing methods.

Representative Signatures

TimeSeriesMatrix(data, times=None, dt=None, t0=None, sample_rate=None, ...)
TimeSeriesMatrix.psd(fftlength=None, overlap=0, ...)

Minimal Example

from gwexpy.timeseries import TimeSeriesMatrix
import numpy as np

mat = TimeSeriesMatrix(np.random.randn(2, 2, 256), sample_rate=256)
coh = mat.coherence(mat)

API Reference

The detailed generated API continues below on this page.

Inherits from: PhaseMethodsMixin, TimeSeriesMatrixCoreMixin, TimeSeriesMatrixAnalysisMixin, TimeSeriesMatrixSpectralMixin, TimeSeriesMatrixInteropMixin, SeriesMatrix

2D Matrix container for multiple TimeSeries objects sharing a common time axis.

This class represents a 2-dimensional array (rows x columns) where each element corresponds to a TimeSeries data stream. Crucially, all elements in the matrix share the same time array (same t0, dt, and number of samples). It behaves like a multivariate time series organized in a grid structure.

Provides dt, t0, times aliases and constructs FrequencySeriesMatrix via FFT.

Methods

MetaDataMatrix

Metadata matrix containing per-element metadata.

N_samples

Number of samples along the x-axis.

T

Transpose of the matrix (rows and columns swapped).

angle

angle(self, unwrap: bool = False, deg: bool = False, **kwargs: Any) -> Any

Alias for phase(unwrap=unwrap, deg=deg).

append

append(self, other, inplace=True, pad=None, gap=None, resize=True)

Append another matrix along the sample axis.

append_exact

append_exact(self, other, inplace=False, pad=None, gap=None, tol=3.814697265625e-06)

Append another matrix with strict contiguity checking.

asd

asd(self, **kwargs: 'Any') -> 'Any'

Compute ASD of each element. Returns FrequencySeriesMatrix.

astype

astype(self, dtype, copy=True)

Cast matrix data to a specified type.

auto_coherence

auto_coherence(self, *args, **kwargs)

Element-wise delegate to TimeSeries.auto_coherence.

bandpass

bandpass(self, *args, **kwargs)

Element-wise delegate to TimeSeries.bandpass.

channel_names

Flattened list of all element names.

channels

2D array of channel identifiers for each matrix element.

coherence

coherence(self, other, *args, **kwargs)

Element-wise delegate to TimeSeries.coherence with another TimeSeries.

col_index

col_index(self, key: 'Any') -> 'int'

Get the integer index for a column key.

col_keys

col_keys(self) -> 'tuple[Any, ...]'

Get the keys (labels) for all columns.

conj

conj(self)

Complex conjugate of the matrix.

copy

copy(self, order='C')

Create a deep copy of this matrix.

correlation_vector

correlation_vector(self, target_timeseries, method='mic', nproc=None)

Calculate correlation between a target TimeSeries and all channels in this Matrix.

Notes

  • method="pearson" uses a vectorized path (fast for many channels).

  • For small matrices, nproc may be throttled to avoid process overhead.

partial_correlation_matrix

partial_correlation_matrix(self, *, estimator: str = 'empirical', shrinkage: float | str | None = None, eps: float = 1e-08, return_precision: bool = False) -> Any

Compute the partial-correlation matrix across all channels (flattened).

crop

crop(self, start: 'Any' = None, end: 'Any' = None, copy: 'bool' = False) -> 'Any'

Crop this matrix to the given GPS start and end times. Accepts any time format supported by gwexpy.time.to_gps (str, datetime, pandas, obspy, etc).

csd

csd(self, other, *args, **kwargs)

Element-wise delegate to TimeSeries.csd with another TimeSeries.

degree

degree(self, unwrap: 'bool' = False, **kwargs: 'Any') -> 'Any'

Calculate the instantaneous phase of the matrix in degrees.

Parameters

unwrap : bool, optional If True, unwrap the phase. **kwargs Passed to analytic_signal.

Returns

TimeSeriesMatrix The phase of the matrix elements, in degrees.

det

det(self)

Compute the determinant of the matrix at each sample point.

detrend

detrend(self, *args, **kwargs)

Element-wise delegate to TimeSeries.detrend.

diagonal

diagonal(self, output: 'str' = 'list')

Extract diagonal elements from the matrix.

dict_class

dict_class(...)

Dictionary of TimeSeries objects.

diff

diff(self, n=1, axis=None)

Calculate the n-th discrete difference along the sample axis.

dt

Time spacing (dx).

duration

Duration covered by the samples.

dx

Step size between samples on the x-axis.

fft

fft(self, **kwargs: 'Any') -> 'Any'

Compute FFT of each element. Returns FrequencySeriesMatrix.

filter

filter(self, *args, **kwargs)

Element-wise delegate to TimeSeries.filter.

find_peaks

find_peaks(self, threshold: 'Optional[float]' = None, method: 'str' = 'amplitude', **kwargs: 'Any') -> 'Any'

Find peaks in each element of the matrix. Element-wise delegate to TimeSeries.find_peaks.

from_neo

from_neo(sig: 'Any') -> 'Any'

Create TimeSeriesMatrix from neo.AnalogSignal.

Parameters

sig : neo.core.AnalogSignal Input signal.

Returns

TimeSeriesMatrix

get_index

get_index(self, key_row: 'Any', key_col: 'Any') -> 'tuple[int, int]'

Get the (row, col) integer indices for given keys.

highpass

highpass(self, *args, **kwargs)

Element-wise delegate to TimeSeries.highpass.

ica

ica(self, return_model: 'bool' = False, **kwargs: 'Any') -> 'Any'

Fit and transform ICA.

ica_fit

ica_fit(self, **kwargs: 'Any') -> 'Any'

Fit ICA.

ica_inverse_transform

ica_inverse_transform(self, ica_res: 'Any', sources: 'Any') -> 'Any'

Inverse transform ICA sources.

ica_transform

ica_transform(self, ica_res: 'Any') -> 'Any'

Transform using ICA.

imag

imag(self)

Imaginary part of the matrix.

impute

impute(self, *, method: 'str' = 'linear', limit: 'Optional[int]' = None, axis: 'str' = 'time', max_gap: 'Optional[float]' = None, **kwargs: 'Any') -> 'Any'

Impute missing values in the matrix.

interpolate

interpolate(self, xindex, **kwargs)

Interpolate the matrix to a new sample axis.

inv

inv(self, swap_rowcol: 'bool' = True)

Compute the matrix inverse at each sample point.

is_compatible

is_compatible(self, other: 'Any') -> 'bool'

Compatibility check.

is_compatible_exact

is_compatible_exact(self, other: 'Any') -> 'bool'

Check strict compatibility with another matrix.

is_contiguous

is_contiguous(self, other: 'Any', tol: 'float' = 3.814697265625e-06) -> 'int'

Check if this matrix is contiguous with another.

is_contiguous_exact

is_contiguous_exact(self, other: 'Any', tol: 'float' = 3.814697265625e-06) -> 'int'

Check contiguity with strict shape matching.

is_regular

Return True if this series has a regular grid (constant spacing).

keys

keys(self) -> 'tuple[tuple[Any, ...], tuple[Any, ...]]'

Get both row and column keys.

list_class

list_class(*items)

List of TimeSeries objects.

loc

Label-based indexer for direct value access.

lock_in

lock_in(self, **kwargs: 'Any') -> 'Any'

Apply lock-in amplification element-wise.

Returns

TimeSeriesMatrix or tuple of TimeSeriesMatrix If output=’amp_phase’ (default) or β€˜iq’, returns (matrix1, matrix2). If output=’complex’, returns a single complex TimeSeriesMatrix.

lowpass

lowpass(self, *args, **kwargs)

Element-wise delegate to TimeSeries.lowpass.

max

max(self, axis=None, out=None, keepdims=False, initial=None, where=True, ignore_nan=True)

a.max(axis=None, out=None, keepdims=False, initial=, where=True)

Return the maximum along a given axis.

Refer to numpy.amax for full documentation.

See Also

numpy.amax : equivalent function

(Inherited from ndarray)

mean

mean(self, axis=None, dtype=None, out=None, keepdims=False, *, where=True, ignore_nan=True)

a.mean(axis=None, dtype=None, out=None, keepdims=False, *, where=True)

Returns the average of the array elements along given axis.

Refer to numpy.mean for full documentation.

See Also

numpy.mean : equivalent function

(Inherited from ndarray)

median

median(self, axis=None, out=None, overwrite_input=False, keepdims=False, ignore_nan=True)

No documentation available.

min

min(self, axis=None, out=None, keepdims=False, initial=None, where=True, ignore_nan=True)

a.min(axis=None, out=None, keepdims=False, initial=, where=True)

Return the minimum along a given axis.

Refer to numpy.amin for full documentation.

See Also

numpy.amin : equivalent function

(Inherited from ndarray)

names

2D array of names for each matrix element. Alias for channel_names if 1D.

notch

notch(self, *args, **kwargs)

Element-wise delegate to TimeSeries.notch.

pad

pad(self, pad_width, **kwargs)

Pad the matrix along the sample axis.

pca

pca(self, return_model: 'bool' = False, **kwargs: 'Any') -> 'Any'

Fit and transform PCA.

pca_fit

pca_fit(self, **kwargs: 'Any') -> 'Any'

Fit PCA.

pca_inverse_transform

pca_inverse_transform(self, pca_res: 'Any', scores: 'Any') -> 'Any'

Inverse transform PCA scores.

pca_transform

pca_transform(self, pca_res: 'Any', **kwargs: 'Any') -> 'Any'

Transform using PCA.

phase

phase(self, unwrap: bool = False, deg: bool = False, **kwargs: Any) -> Any

Calculate the phase of the data.

Parameters

unwrap : bool, optional If True, unwrap the phase to remove discontinuities. Default is False. deg : bool, optional If True, return the phase in degrees. Default is False (radians). **kwargs Additional arguments passed to the underlying calculation.

Returns

Series or Matrix or Collection The phase of the data.

plot

plot(self, **kwargs: 'Any') -> 'Any'

Plot the matrix data.

prepend

prepend(self, other, inplace=True, pad=None, gap=None, resize=True)

Prepend another matrix at the beginning along the sample axis.

prepend_exact

prepend_exact(self, other, inplace=False, pad=None, gap=None, tol=3.814697265625e-06)

Prepend another matrix with strict contiguity checking.

psd

psd(self, **kwargs: 'Any') -> 'Any'

Compute PSD of each element. Returns FrequencySeriesMatrix.

q_transform

q_transform(self, *args: 'Any', **kwargs: 'Any') -> 'Any'

Compute Q-transform of each element. Returns SpectrogramMatrix.

radian

radian(self, unwrap: 'bool' = False, **kwargs: 'Any') -> 'Any'

Calculate the instantaneous phase of the matrix in radians.

Parameters

unwrap : bool, optional If True, unwrap the phase. **kwargs Passed to analytic_signal.

Returns

TimeSeriesMatrix The phase of the matrix elements, in radians.

read

read(source, format=None, **kwargs)

Read a SeriesMatrix from file.

Parameters

source : str or path-like Path to file to read. format : str, optional File format. If None, inferred from extension. **kwargs Additional arguments passed to the reader.

Returns

SeriesMatrix The loaded matrix.

The available built-in formats are:

======== ==== ===== ============= Format Read Write Auto-identify ======== ==== ===== ============= ats Yes No No gbd Yes No No gse2 Yes No No knet Yes No No li Yes No No lsf Yes No No mem Yes No No miniseed Yes No No orf Yes No No sac Yes No No sdb Yes No No sqlite Yes No No sqlite3 Yes No No taffmat Yes No No tdms Yes No No wav Yes No No wdf Yes No No win Yes No No win32 Yes No No wvf Yes No No ======== ==== ===== =============

Public direct-I/O note: TimeSeriesMatrix supports generic HDF5 through read(..., format="hdf5"), write(..., format="hdf5"), and to_hdf5(), but collection-first formats such as hdf.ndscope and xml.diaggui are not part of the public matrix direct-I/O contract.

real

real(self)

Real part of the matrix.

resample

resample(self, *args, **kwargs)

Element-wise delegate to TimeSeries.resample.

reshape

reshape(self, shape, order='C')

Reshape the matrix dimensions.

rms

rms(self, axis=None, keepdims=False, ignore_nan=True)

No documentation available.

rolling_max

rolling_max(self, window: 'Any', *, center: 'bool' = False, min_count: 'int' = 1, nan_policy: 'str' = 'omit', backend: 'str' = 'auto', ignore_nan: 'Optional[bool]' = None) -> 'Any'

Rolling maximum along the time axis.

rolling_mean

rolling_mean(self, window: 'Any', *, center: 'bool' = False, min_count: 'int' = 1, nan_policy: 'str' = 'omit', backend: 'str' = 'auto', ignore_nan: 'Optional[bool]' = None) -> 'Any'

Rolling mean along the time axis.

rolling_median

rolling_median(self, window: 'Any', *, center: 'bool' = False, min_count: 'int' = 1, nan_policy: 'str' = 'omit', backend: 'str' = 'auto', ignore_nan: 'Optional[bool]' = None) -> 'Any'

Rolling median along the time axis.

rolling_min

rolling_min(self, window: 'Any', *, center: 'bool' = False, min_count: 'int' = 1, nan_policy: 'str' = 'omit', backend: 'str' = 'auto', ignore_nan: 'Optional[bool]' = None) -> 'Any'

Rolling minimum along the time axis.

rolling_std

rolling_std(self, window: 'Any', *, center: 'bool' = False, min_count: 'int' = 1, nan_policy: 'str' = 'omit', backend: 'str' = 'auto', ddof: 'int' = 0, ignore_nan: 'Optional[bool]' = None) -> 'Any'

Rolling standard deviation along the time axis.

row_index

row_index(self, key: 'Any') -> 'int'

Get the integer index for a row key.

row_keys

row_keys(self) -> 'tuple[Any, ...]'

Get the keys (labels) for all rows.

sample_rate

Sampling rate (1/dt).

schur

schur(self, keep_rows, keep_cols=None, eliminate_rows=None, eliminate_cols=None)

Compute the Schur complement of a block matrix.

series_class

series_class(data, *args, **kwargs)

Extended TimeSeries with all gwexpy functionality.

smooth

smooth(self, width: 'Any', method: 'str' = 'amplitude', ignore_nan: 'bool' = True) -> 'Any'

Smooth the data. Element-wise delegate to TimeSeries.smooth.

This class combines functionality from multiple modules:

  • Core operations: is_regular, _check_regular, tail, crop, append, find_peaks

  • Spectral transforms: fft, psd, cwt, laplace, etc.

  • Signal processing: analytic_signal, mix_down, xcorr, etc.

  • Analysis: impute, standardize, rolling_*, etc.

  • Interoperability: to_pandas, to_torch, to_xarray, etc.

Inherits from gwpy.timeseries.TimeSeries for full compatibility.

shape3D

Shape of the matrix as a 3-tuple (n_rows, n_cols, n_samples). For 4D matrices (spectrograms), the last dimension is likely frequency, so n_samples is determined by _x_axis_index.

shift

shift(self, delta)

Shift the sample axis by a constant offset.

span

Time span (xspan).

spectrogram

spectrogram(self, *args: 'Any', **kwargs: 'Any') -> 'Any'

Compute spectrogram of each element. Returns SpectrogramMatrix.

spectrogram2

spectrogram2(self, *args: 'Any', **kwargs: 'Any') -> 'Any'

Compute spectrogram2 of each element. Returns SpectrogramMatrix.

standardize

standardize(self, *, axis: 'str' = 'time', method: 'str' = 'zscore', ddof: 'int' = 0, **kwargs: 'Any') -> 'Any'

Standardize the matrix. See gwexpy.timeseries.preprocess.standardize_matrix.

std

std(self, axis=None, dtype=None, out=None, ddof=0, keepdims=False, *, where=True, ignore_nan=True)

a.std(axis=None, dtype=None, out=None, ddof=0, keepdims=False, *, where=True)

Returns the standard deviation of the array elements along given axis.

Refer to numpy.std for full documentation.

See Also

numpy.std : equivalent function

(Inherited from ndarray)

step

step(self, where: 'str' = 'post', **kwargs: 'Any') -> 'Any'

Plot the matrix as a step function.

submatrix

submatrix(self, row_keys, col_keys)

Extract a submatrix by selecting specific rows and columns.

t0

Start time (x0).

taper

taper(self, *args, **kwargs)

Element-wise delegate to TimeSeries.taper.

times

Time array (xindex).

to_cupy

to_cupy(self, dtype=None) -> Any

Convert to CuPy Array.

to_dask

to_dask(self, chunks='auto') -> Any

Convert to Dask Array.

to_dict

to_dict(self) -> 'Any'

Convert matrix to an appropriate collection dict (e.g. TimeSeriesDict). Follows the matrix structure (row, col) unless it’s a 1-column matrix.

to_dict_flat

to_dict_flat(self) -> 'dict[str, Series]'

Convert matrix to a flat dictionary mapping name to Series.

to_hdf5

to_hdf5(self, filepath, **kwargs)

Write matrix to HDF5 file.

to_jax

to_jax(self) -> Any

Convert to JAX Array.

to_list

to_list(self) -> 'Any'

Convert matrix to an appropriate collection list (e.g. TimeSeriesList).

to_mne

to_mne(self, info: 'Any' = None) -> 'Any'

Convert to mne.io.RawArray.

to_neo

to_neo(self, units: 'Any' = None) -> 'Any'

Convert to neo.AnalogSignal.

Returns

neo.core.AnalogSignal

to_pandas

to_pandas(self, format='wide')

Convert matrix to a pandas DataFrame.

to_series_1Dlist

to_series_1Dlist(self) -> 'list[Series]'

Convert matrix to a flat 1D list of Series objects.

to_series_2Dlist

to_series_2Dlist(self) -> 'list[list[Series]]'

Convert matrix to a 2D nested list of Series objects.

to_tensorflow

to_tensorflow(self, dtype: Any = None) -> Any

Convert to tensorflow.Tensor.

to_torch

to_torch(self, device: Optional[str] = None, dtype: Any = None, requires_grad: bool = False, copy: bool = False) -> Any

Convert to torch.Tensor.

to_zarr

to_zarr(self, store, path=None, **kwargs) -> Any

Save to Zarr storage.

trace

trace(self)

Compute the trace of the matrix (sum of diagonal elements).

transfer_function

transfer_function(self, other, *args, **kwargs)

Element-wise delegate to TimeSeries.transfer_function with another TimeSeries.

transpose

transpose(self, *axes)

Transpose rows and columns, preserving sample axis as 2.

units

2D array of units for each matrix element.

update

update(self, other, inplace=True, pad=None, gap=None)

Update matrix by appending without resizing (rolling buffer style).

value

Underlying numpy array of data values.

value_at

value_at(self, x)

Get the matrix values at a specific x-axis location.

var

var(self, axis=None, dtype=None, out=None, ddof=0, keepdims=False, *, where=True, ignore_nan=True)

a.var(axis=None, dtype=None, out=None, ddof=0, keepdims=False, *, where=True)

Returns the variance of the array elements, along given axis.

Refer to numpy.var for full documentation.

See Also

numpy.var : equivalent function

(Inherited from ndarray)

whiten

whiten(self, *args, **kwargs)

Element-wise delegate to TimeSeries.whiten.

whiten_channels

whiten_channels(self, *, method: 'str' = 'pca', eps: 'float' = 1e-12, n_components: 'Optional[int]' = None, return_model: 'bool' = True) -> 'Any'

Whiten the matrix (channels/components). Returns (whitened_matrix, WhiteningModel) by default. Set return_model=False to return only the whitened matrix. See gwexpy.timeseries.preprocess.whiten_matrix.

write

write(self, target, format=None, **kwargs)

Write matrix to file.

x0

Starting value of the sample axis.

xarray

Return the sample axis values.

xindex

Sample axis index array.

xspan

Full extent of the sample axis as a tuple (start, end).

xunit

No documentation available.