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 矩陣。- 返回類型:
範例
僅指定
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
對於 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)