jax.scipy.linalg.toeplitz#

jax.scipy.linalg.toeplitz(c, r=None)[source]#

建構 Toeplitz 矩陣。

JAX 實作的 scipy.linalg.toeplitz()

Toeplitz 矩陣具有相等的對角線:\(A_{ij} = k_{i - j}\),對於 \(0 \le i < n\)\(0 \le j < n\)。此函數透過第一列 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) – 形狀為 (..., N) 的陣列,指定第一列。

  • r (ArrayLike | None | None) – (選用) 形狀為 (..., M) 的陣列,指定第一行。前導維度必須與 c 的維度廣播相容。如果未指定,r 預設為 conj(c)

返回:

形狀為 (... N, M) 的 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)

如果僅指定複數值 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

對於 N 維 c 和/或 r,結果是一批 Toeplitz 矩陣

>>> c = jnp.array([[1, 2, 3], [4, 5, 6]])
>>> jax.scipy.linalg.toeplitz(c)
Array([[[1, 2, 3],
        [2, 1, 2],
        [3, 2, 1]],

       [[4, 5, 6],
        [5, 4, 5],
        [6, 5, 4]]], dtype=int32)