Signals
The primary input for all filtering operations is a signal defined on the vertices of the graph. This signal should be provided as a NumPy array.
Format and Memory Layout
The signal array X can be either:
1D: Shape
(n_vertices,)for a single signal2D: Shape
(n_vertices, n_timesteps)for multiple signals
where n_vertices is the number of vertices (nodes) in the graph, matching L.shape[0], and n_timesteps is the number of independent signals or time samples to be processed concurrently.
When a 1D signal is passed, the output will also be 1D (squeezed accordingly).
For optimal performance with 2D signals, it is highly recommended to create the signal array with column-major (Fortran) ordering by specifying order='F'. This memory layout aligns with the underlying C-based CHOLMOD library, avoiding costly data re-ordering during computation.
import numpy as np
from sgwt import DELAY_USA as L
n_vertices = L.shape[0]
# 1D signal (single signal)
X_1d = np.random.randn(n_vertices)
# 2D signal (multiple signals)
n_signals = 10
X_2d = np.random.randn(n_vertices, n_signals).astype(np.float64)
X_2d = np.asfortranarray(X_2d)
# Verify the memory order for 2D
assert X_2d.flags['F_CONTIGUOUS']
See also
- Graph Laplacian
For the definition of vertex-domain functions.
Creating Test Signals with impulse
For testing and examples, the library provides the impulse() helper function to quickly generate a Dirac impulse (a value of 1 at one vertex and 0 everywhere else).
from sgwt import impulse
from sgwt import DELAY_TEXAS as L
# Create a signal with a single impulse at vertex 600
X_impulse = impulse(L, n=600)
print(X_impulse.shape)
# Output: (2000, 1)