mars.tensor.fft.ifftn#

mars.tensor.fft.ifftn(a, s=None, axes=None, norm=None)[来源]#

计算N维逆离散傅里叶变换。

该函数通过快速傅里叶变换(FFT)计算任意数量轴上的M维张量的N维离散傅里叶变换的逆。换句话说,ifftn(fftn(a)) == a 在数值精度范围内。有关所使用的定义和约定的描述,参见 mt.fft

输入,与ifft类似,应按fftn返回的方式排序,即在所有轴的低阶角落中应包含零频率项,在所有轴的前半部分中应包含正频率项,在所有轴的中间包含奈奎斯特频率项,以及在所有轴的后半部分中应包含负频率项,按负频率递减的顺序排列。

Parameters
  • a (array_like) – 输入张量,可以是复数。

  • s (序列 of 整型, 可选) – 输出的形状(每个变换轴的长度) (s[0] 指代轴 0, s[1] 指代轴 1,等等)。 这对应于 nifft(x, n) 中。 沿任一轴,如果给定的形状小于输入的形状, 则输入被裁剪。如果形状大于输入,则输入用零填充。 如果 s 未给出,则使用由 axes 指定的轴上的输入形状。 有关 ifft 零填充的问题,请参见备注。

  • axes (序列 of 整数, 可选) – 计算 IFFT 的轴。如果未提供,则使用最后 len(s) 个轴,或者如果 s 也未指定,则使用所有轴。axes 中的重复索引意味着在该轴上进行多次逆变换。

  • norm ({None, "ortho"}, 可选) – 归一化模式(见 mt.fft)。默认值为 None。

Returns

out – 截断或零填充的输入,沿着由 axes 指示的轴进行变换,或者由上述参数部分解释的 sa 的组合进行变换。

Return type

复合张量

Raises
  • ValueError – 如果saxes的长度不同。

  • IndexError – 如果axes的某个元素大于a的轴数量。

另请参阅

mt.fft

离散傅里叶变换的整体视图,包括使用的定义和约定。

fftn

一维 n 维 FFT,其中 ifftn 是其反变换。

ifft

一维逆傅里叶变换。

ifft2

二维逆FFT。

ifftshift

撤消 fftshift,将零频率项移到张量的开头。

备注

请参阅 mt.fft 以获取使用的定义和惯例。

零填充,类似于 ifft,是在指定维度上向输入附加零。尽管这是常见的做法,但可能会导致意外的结果。如果需要另一种形式的零填充,必须在调用 ifftn 之前进行。

示例

>>> import mars.tensor as mt
>>> a = mt.eye(4)
>>> mt.fft.ifftn(mt.fft.fftn(a, axes=(0,)), axes=(1,)).execute()
array([[ 1.+0.j,  0.+0.j,  0.+0.j,  0.+0.j],
       [ 0.+0.j,  1.+0.j,  0.+0.j,  0.+0.j],
       [ 0.+0.j,  0.+0.j,  1.+0.j,  0.+0.j],
       [ 0.+0.j,  0.+0.j,  0.+0.j,  1.+0.j]])

创建并绘制具有带限频率内容的图像:

>>> import matplotlib.pyplot as plt
>>> n = mt.zeros((200,200), dtype=complex)
>>> n[60:80, 20:40] = mt.exp(1j*mt.random.uniform(0, 2*mt.pi, (20, 20)))
>>> im = mt.fft.ifftn(n).real
>>> plt.imshow(im.execute())
<matplotlib.image.AxesImage object at 0x...>
>>> plt.show()