jax.scipy.linalg.toeplitz#
- jax.scipy.linalg.toeplitz(c, r=None)[源代码][源代码]#
构造一个 Toeplitz 矩阵
JAX 实现的
scipy.linalg.toeplitz()
。Toeplitz矩阵具有相等的对角线:对于 \(0 \le i < n\) 和 \(0 \le j < n\),有 \(A_{ij} = k_{i - j}\)。此函数通过第一列
c
和第一行r
指定对角线,使得对于行 i 和列 j:\[\begin{split}A_{ij} = \begin{cases} c_{i - j} & i \ge j \\ r_{j - i} & i < j \end{cases}\end{split}\]注意,这意味着 \(r_0\) 被忽略了。
- 参数:
c (ArrayLike) – 指定第一列的数组。如果不是一维的,将会被展平。
r (ArrayLike | None) – (可选) 指定第一行的数组。如果未指定,默认为
conj(c)
。如果不是一维的,将被展平。
- 返回:
形状为
(c.size, r.size)
的 Toeplitz 矩阵。- 返回类型:
示例
仅指定
c
:>>> c = jnp.array([1, 2, 3]) >>> jax.scipy.linalg.toeplitz(c) Array([[1, 2, 3], [2, 1, 2], [3, 2, 1]], dtype=int32)
指定
c
和r
:>>> r = jnp.array([-1, -2, -3]) >>> jax.scipy.linalg.toeplitz(c, r) # Note r[0] is ignored Array([[ 1, -2, -3], [ 2, 1, -2], [ 3, 2, 1]], dtype=int32)
如果仅指定复数值的
c
,r
默认为c.conj()
,如果c[0].imag == 0
,则结果为 Hermitian 矩阵:>>> c = jnp.array([1, 2+1j, 1+2j]) >>> M = jax.scipy.linalg.toeplitz(c) >>> M Array([[1.+0.j, 2.-1.j, 1.-2.j], [2.+1.j, 1.+0.j, 2.-1.j], [1.+2.j, 2.+1.j, 1.+0.j]], dtype=complex64) >>> print("M is Hermitian:", jnp.all(M == M.conj().T)) M is Hermitian: True