【发布时间】:2016-12-07 08:41:32
【问题描述】:
我正在尝试有效地 np.fft.fftn 和 2D numpy 数组的数组。 V0 是一个形状为(nvar,nx,ny) 的数组,我想从V0 的第一个维度对每个二维数组执行 FFT。我在这里尝试做的是比较V0 的第一个轴上的迭代,并将其与对整个多维数组进行 FFT 的天真尝试进行比较:
In [45]: import numpy as np
In [46]: V0 = np.random.random((3,128,128))
In [47]: V0fft = []
In [48]: for i in xrange(V0.shape[0]):
...: V0fft.append(np.fft.fftn(V0[i]))
...:
In [49]: V0fftdirect = np.fft.fftn(V0)
In [50]: np.amax(np.abs(V0fft - V0fftdirect))
Out[50]: 16366.207818488827
那我该怎么做才能正确呢?
【问题讨论】:
-
尝试指定轴
numpy.fft.fftn(a, s=None, axes=0, norm=None) -
尝试这个
V0fftdirect = np.fft.fftn(V0, s=None, axes=0, norm=None)会导致错误:TypeError: 'numpy.int64' object is not iterable -
对不起,
axes应该是一个序列:numpy.fft.fftn(a, s=None, axes=(0), norm=None) -
它可以工作,但由于某种原因,它仍然没有给我与迭代第一个轴索引相同的结果 -
In [75]: np.amax(np.abs(V0fft - V0fftdirect)) Out[75]: 8226.2612029266456 -
在for循环中,将
np.fft.fftn替换为np.fft.fft2
标签: python arrays python-2.7 numpy fft