jax.scipy.linalg.toeplitz

目录

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 矩阵。

返回类型:

Array

示例

仅指定 c

>>> c = jnp.array([1, 2, 3])
>>> jax.scipy.linalg.toeplitz(c)
Array([[1, 2, 3],
       [2, 1, 2],
       [3, 2, 1]], dtype=int32)

指定 cr:

>>> 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)

如果仅指定复数值的 cr 默认为 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