jax.numpy.fft.hfft#
- jax.numpy.fft.hfft(a, n=None, axis=-1, norm=None)[source]#
計算頻譜具有 Hermitian 對稱性的陣列的一維 FFT。
numpy.fft.hfft()
的 JAX 實作。- 參數:
- 傳回值:
一個實值陣列,包含
a
的一維離散傅立葉轉換,利用其固有的 Hermitian 對稱性,沿axis
的維度為n
。- 傳回類型:
另請參閱
jax.numpy.fft.ihfft()
:計算頻譜具有 Hermitian 對稱性的陣列的一維反 FFT。jax.numpy.fft.fft()
:計算一維離散傅立葉轉換。jax.numpy.fft.rfft()
:計算實值輸入的一維離散傅立葉轉換。
範例
>>> x = jnp.array([[1, 3, 5, 7], ... [2, 4, 6, 8]]) >>> jnp.fft.hfft(x) Array([[24., -8., 0., -2., 0., -8.], [30., -8., 0., -2., 0., -8.]], dtype=float32)
此值等於使用
jnp.fft.fft
計算的以下陣列x1
的離散傅立葉轉換的實部。>>> x1 = jnp.array([[1, 3, 5, 7, 5, 3], ... [2, 4, 6, 8, 6, 4]]) >>> jnp.fft.fft(x1) Array([[24.+0.j, -8.+0.j, 0.+0.j, -2.+0.j, 0.+0.j, -8.+0.j], [30.+0.j, -8.+0.j, 0.+0.j, -2.+0.j, 0.+0.j, -8.+0.j]], dtype=complex64) >>> jnp.allclose(jnp.fft.hfft(x), jnp.fft.fft(x1)) Array(True, dtype=bool)
若要從
jnp.fft.hfft
取得奇數長度輸出,n
必須指定為奇數值,因為預設行為會沿指定的axis
產生偶數長度結果。>>> with jnp.printoptions(precision=2, suppress=True): ... print(jnp.fft.hfft(x, n=5)) [[17. -5.24 -0.76 -0.76 -5.24] [22. -5.24 -0.76 -0.76 -5.24]]
當
n=3
且axis=0
時,沿axis 0
的轉換維度將為3
,而沿其他軸的維度將與輸入相同。>>> jnp.fft.hfft(x, n=3, axis=0) Array([[ 5., 11., 17., 23.], [-1., -1., -1., -1.], [-1., -1., -1., -1.]], dtype=float32)
只有當
n
指定為2*(m-1)
(如果 m 是偶數)或2*m-1
(如果m
是奇數)時,才能使用jnp.fft.ihfft
從jnp.fft.hfft
的結果重建x
(但為複數資料類型),其中m
是輸入沿axis
的維度。>>> jnp.fft.ihfft(jnp.fft.hfft(x, 2*(x.shape[-1]-1))) Array([[1.+0.j, 3.+0.j, 5.+0.j, 7.+0.j], [2.+0.j, 4.+0.j, 6.+0.j, 8.+0.j]], dtype=complex64) >>> jnp.allclose(x, jnp.fft.ihfft(jnp.fft.hfft(x, 2*(x.shape[-1]-1)))) Array(True, dtype=bool)
對於複數值輸入
>>> x2 = jnp.array([[1+2j, 3-4j, 5+6j], ... [2-3j, 4+5j, 6-7j]]) >>> jnp.fft.hfft(x2) Array([[ 12., -12., 0., 4.], [ 16., 6., 0., -14.]], dtype=float32)