jax.numpy.fft.hfft

目录

jax.numpy.fft.hfft#

jax.numpy.fft.hfft(a, n=None, axis=-1, norm=None)[源代码][源代码]#

计算具有厄米特对称性的数组的 1-D FFT。

JAX 实现的 numpy.fft.hfft()

参数:
  • a (ArrayLike) – 输入数组。

  • n (int | None) – 可选, int. 指定结果沿 axis 的维度。如果未指定,n = 2*(m-1),其中 ma 沿 axis 的维度。

  • axis (int) – 可选, int, 默认=-1。指定计算变换的轴。如果未指定,变换将沿轴 -1 计算。

  • norm (str | None) – 可选,字符串。归一化模式。支持 “backward”、”ortho” 和 “forward”。默认是 “backward”。

返回:

一个实数值数组,包含通过利用其固有的厄米对称性对 a 进行一维离散傅里叶变换的结果,沿 axis 方向的维度为 n

返回类型:

Array

参见

示例

>>> 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=3axis=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)

x 可以使用 jnp.fft.ihfftjnp.fft.hfft 的结果中重建(但数据类型复杂),仅当 n 指定为 2*(m-1)``(如果 `m` 是偶数)或 ``2*m-1``(如果 `m` 是奇数)时,其中 ``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)