Python 应用于矩阵的fft/fft2返回值之间有什么区别?

Python 应用于矩阵的fft/fft2返回值之间有什么区别?,python,fft,Python,Fft,在下面的程序中,我想计算由U给出的给定场的快速傅里叶变换。fft和fft2的返回值之间的差异是什么?任何帮助都将不胜感激!多谢各位 import numpy as np from numpy import sin, cos, pi nx=3 ny=3 px=2*pi py=2*pi qx=1.0*px/(nx-1) qy=1.0*py/(ny-1) x = np.linspace(0,px,nx) y = np.linspace(0,py,ny) X,Y = np.meshgrid(x

在下面的程序中,我想计算由U给出的给定场的快速傅里叶变换。fft和fft2的返回值之间的差异是什么?任何帮助都将不胜感激!多谢各位

import numpy as np
from numpy import sin, cos, pi

nx=3
ny=3

px=2*pi
py=2*pi

qx=1.0*px/(nx-1)
qy=1.0*py/(ny-1)

x = np.linspace(0,px,nx)
y = np.linspace(0,py,ny)

X,Y = np.meshgrid(x,y)

U=cos(X)*sin(Y)

#compite fft's
Uh1=np.fft.fft(U)

Uh2=np.fft.fft2(U)

print('For fft')
print(Uh1)

print('For fft2')
print(Uh2)

#What is the difference between Uh1 and Uh2? Thank you!
以下是我得到的:

For fft
[[  0.00000000e+00 +0.00000000e+00j   0.00000000e+00 +0.00000000e+00j
0.00000000e+00 +0.00000000e+00j]
[  1.22464680e-16 +0.00000000e+00j   1.22464680e-16 +2.12115048e-16j
1.22464680e-16 -2.12115048e-16j]
[ -2.44929360e-16 +0.00000000e+00j  -2.44929360e-16 -4.24230095e-16j
-2.44929360e-16 +4.24230095e-16j]]
For fft2
[[ -1.22464680e-16 +0.00000000e+00j  -1.22464680e-16 -2.12115048e-16j
-1.22464680e-16 +2.12115048e-16j]
[  6.12323400e-17 -3.18172572e-16j   6.12323400e-16 -2.12115048e-16j
-4.89858720e-16 -4.24230095e-16j]
[  6.12323400e-17 +3.18172572e-16j  -4.89858720e-16 +4.24230095e-16j
6.12323400e-16 +2.12115048e-16j]]

谢谢大家!

np.fft模块的docstring

Standard FFTs
-------------

.. autosummary::
   :toctree: generated/

   fft       Discrete Fourier transform.
   ifft      Inverse discrete Fourier transform.
   fft2      Discrete Fourier transform in two dimensions.
   ifft2     Inverse discrete Fourier transform in two dimensions.
   fftn      Discrete Fourier transform in N-dimensions.
   ifftn     Inverse discrete Fourier transform in N dimensions.
如果你不想把两者的差异形象化,绘制这两个矩阵就可以得到这个结果。我对fft的了解还不够,甚至不知道以这种方式绘制它们是否有意义

plt.figure()

plt.subplot(2,2,1)
plt.plot(Uh1.real.ravel())
plt.title("1 - real")
plt.subplot(2,2,2)
plt.plot(Uh2.real.ravel())
plt.title("2 - real")

plt.subplot(2,2,3)
plt.plot(Uh1.imag.ravel())
plt.title("1 - imaginary")
plt.subplot(2,2,4)
plt.plot(Uh2.imag.ravel())
plt.title("2 - imaginary")

plt.figure()

plt.subplot(2,2,1)
plt.hist(Uh1.real.ravel())
plt.title("1 - real")
plt.subplot(2,2,2)
plt.hist(Uh2.real.ravel())
plt.title("2 - real")

plt.subplot(2,2,3)
plt.hist(Uh1.imag.ravel())
plt.title("1 - imaginary")
plt.subplot(2,2,4)
plt.hist(Uh2.imag.ravel())
plt.title("2 - imaginary")


您是否查看了从每个数据库返回的值?
numpy
文档?@jornsharpe是的。我已经看过文档,但我想知道这两个函数返回的结果有什么不同。@jornsharpe我刚刚添加了一些关于这个问题的细节!如果函数的描述没有告诉你你想要什么,谢谢你。那么这我认为这更像是一个数学\物理问题,而不是一个编程问题。是的@M4rtini实际上有另一种方法可以知道哪一种方法真正对应于U的DFT。我将比较基于U和V的傅里叶空间中计算的能谱与直接在物理空间中获得的能量。事实上,我想找到与我的速度(泰勒涡)相关的能量级联,即(每个波数的能量)。谢谢你宝贵的帮助!谢谢你!事实上,我现在也不知道应该用哪一个来计算我的场U的DFT。我甚至可以理解为什么有巨大的值是fft2的域边界!无论如何,谢谢你的时间和努力@Strömungsmechanik还添加了两个矩阵的直方图,如果有帮助的话。超级!太好了!谢谢:)