mars.tensor.fft.fftn#

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

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

该函数计算通过快速傅里叶变换(FFT)在任意数量的轴上对M维张量进行N维离散傅里叶变换。

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

  • s (序列 of 整数, 可选) – 输出的形状(每个变换轴的长度) (s[0] 指代轴 0, s[1] 指代轴 1,等等)。 这对应于 n 对于 fft(x, n)。 沿着任何轴,如果给定的形状小于输入的形状, 输入将被裁剪。如果它更大,输入将填充零。 如果 s 未给出,则使用 axes 所指定轴上的输入形状。

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

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

Returns

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

Return type

复合张量

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

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

另请参阅

mt.fft

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

ifftn

fftn的逆变换,即逆n维FFT。

fft

一维FFT,包含使用的定义和约定。

rfftn

实输入的n维FFT。

fft2

二维 FFT。

fftshift

将零频率项移至张量中心

备注

输出类似于 fft,包含所有轴的低阶角落中的零频率项,所有轴的前半部分中的正频率项,所有轴中的奈奎斯特频率项,以及所有轴的后半部分中的负频率项,按负频率递减的顺序排列。

有关详细信息、定义和使用的惯例,请参见 mt.fft

示例

>>> import mars.tensor as mt
>>> a = mt.mgrid[:3, :3, :3][0]
>>> mt.fft.fftn(a, axes=(1, 2)).execute()
array([[[  0.+0.j,   0.+0.j,   0.+0.j],
        [  0.+0.j,   0.+0.j,   0.+0.j],
        [  0.+0.j,   0.+0.j,   0.+0.j]],
       [[  9.+0.j,   0.+0.j,   0.+0.j],
        [  0.+0.j,   0.+0.j,   0.+0.j],
        [  0.+0.j,   0.+0.j,   0.+0.j]],
       [[ 18.+0.j,   0.+0.j,   0.+0.j],
        [  0.+0.j,   0.+0.j,   0.+0.j],
        [  0.+0.j,   0.+0.j,   0.+0.j]]])
>>> mt.fft.fftn(a, (2, 2), axes=(0, 1)).execute()
array([[[ 2.+0.j,  2.+0.j,  2.+0.j],
        [ 0.+0.j,  0.+0.j,  0.+0.j]],
       [[-2.+0.j, -2.+0.j, -2.+0.j],
        [ 0.+0.j,  0.+0.j,  0.+0.j]]])
>>> import matplotlib.pyplot as plt
>>> [X, Y] = mt.meshgrid(2 * mt.pi * mt.arange(200) / 12,
...                      2 * mt.pi * mt.arange(200) / 34)
>>> S = mt.sin(X) + mt.cos(Y) + mt.random.uniform(0, 1, X.shape)
>>> FS = mt.fft.fftn(S)
>>> plt.imshow(mt.log(mt.abs(mt.fft.fftshift(FS))**2).execute())
<matplotlib.image.AxesImage object at 0x...>
>>> plt.show()