correspondence with the direct Fourier transform. To recover it you must specify orthogonalize=False
.
For norm="ortho"
both the dst
and idst
are scaled by the same overall factor in both directions. By default, the transform is also orthogonalized which for types 2 and 3 means the transform definition is modified to give orthogonality of the DST matrix (see below).
For norm="backward"
, there is no scaling on the dst
and the idst
is scaled by 1/N
where N
is the "logical" size of the DST.
There are, theoretically, 8 types of the DST for different combinations of even/odd boundary conditions and boundary off sets , only the first 4 types are implemented in SciPy.
Type I
There are several definitions of the DST-I; we use the following for norm="backward"
. DST-I assumes the input is odd around $n=-1$
and $n=N$
.
Note that the DST-I is only supported for input size > 1. The (unnormalized) DST-I is its own inverse, up to a factor $2(N+1)$ . The orthonormalized DST-I is exactly its own inverse.
orthogonalize
has no effect here, as the DST-I matrix is already orthogonal up to a scale factor of 2N
.
Type II
There are several definitions of the DST-II; we use the following for norm="backward"
. DST-II assumes the input is odd around $n=-1/2$
and $n=N-1/2$
; the output is odd around $k=-1$
and even around $k=N-1$
If orthogonalize=True
, y[0]
is divided $\sqrt{2}$
which, when combined with norm="ortho"
, makes the corresponding matrix of coefficients orthonormal ( O @ O.T = np.eye(N)
).
Type III
There are several definitions of the DST-III, we use the following (for norm="backward"
). DST-III assumes the input is odd around $n=-1$
and even around $n=N-1$
If orthogonalize=True
, x[0]
is multiplied by $\sqrt{2}$
which, when combined with norm="ortho"
, makes the corresponding matrix of coefficients orthonormal ( O @ O.T = np.eye(N)
).
The (unnormalized) DST-III is the inverse of the (unnormalized) DST-II, up to a factor $2N$ . The orthonormalized DST-III is exactly the inverse of the orthonormalized DST-II.
Type IV
There are several definitions of the DST-IV, we use the following (for norm="backward"
). DST-IV assumes the input is odd around $n=-0.5$
and even around $n=N-0.5$
orthogonalize
has no effect here, as the DST-IV matrix is already orthogonal up to a scale factor of 2N
.
The (unnormalized) DST-IV is its own inverse, up to a factor $2N$ . The orthonormalized DST-IV is exactly its own inverse.
The input array.
Type of the DST (see Notes). Default type is 2.
Length of the transform. If n < x.shape[axis]
, x
is truncated. If n > x.shape[axis]
, x
is zero-padded. The default results in n = x.shape[axis]
.
Axis along which the dst is computed; the default is over the last axis (i.e., axis=-1
).
Normalization mode (see Notes). Default is "backward".
If True, the contents of x
can be destroyed; the default is False.
Maximum number of workers to use for parallel computation. If negative, the value wraps around from os.cpu_count()
. See ~scipy.fft.fft
for more details.
Whether to use the orthogonalized DST variant (see Notes). Defaults to True
when norm=="ortho"
and False
otherwise.
The transformed input array.
Return the Discrete Sine Transform of arbitrary type sequence x.
idst
Inverse DST
The following pages refer to to this document either explicitly or contain code examples using this.
scipy.fft._realtransforms.dstn
scipy.fft._realtransforms.dst
scipy.fft._realtransforms.idst
Hover to see nodes names; edges to Self not shown, Caped at 50 nodes.
Using a canvas is more power efficient and can get hundred of nodes ; but does not allow hyperlinks; , arrows or text (beyond on hover)
SVG is more flexible but power hungry; and does not scale well to 50 + nodes.
All aboves nodes referred to, (or are referred from) current nodes; Edges from Self to other have been omitted (or all nodes would be connected to the central node "self" which is not useful). Nodes are colored by the library they belong to, and scaled with the number of references pointing them