首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FFT的FFT冻结

FFT的FFT冻结
EN

Stack Overflow用户
提问于 2018-05-15 08:52:31
回答 1查看 322关注 0票数 0

在计算大小为150万项的数组的FFT时:

代码语言:javascript
复制
import numpy as np
from scipy.fftpack import fft

x0 = np.ones(1492828, dtype=np.int32)
fft(x0)
print 'hello'

FFT计算永远不会完成,程序也冻结了。如果我将1492828更改为1492827,它似乎会起作用。但是如果我将1492828改为1492826,它仍然会结冰,这有点奇怪。

这是已知的窃听器吗?

注意:

  • CPU保持在25% (正常情况下,我有一个4核CPU),Python进程的RAM使用量保持在75 MB左右。
  • 我在Windows 7 64位上使用Python 2.7.15 64位: 打印scipy.__version__ # 1.1.0打印sys.version # 2.7.15 (v2.7.15:ca079a3e3,2018年4月30日,16: 30 :26) MSC v.1500 64位(AMD64)
EN

回答 1

Stack Overflow用户

发布于 2018-05-15 09:28:16

通常的快速傅立叶变换算法对于长度小的素数因子来说要快得多,正如here所解释的那样。

解决方案是将数组零点到下一个2倍的幂:

代码语言:javascript
复制
def zeropad_nextpoweroftwo(A):
    return np.concatenate([A, np.zeros(int(2 ** np.ceil(np.log2(len(A))))-len(A), 
        dtype=A.dtype)])

或者,更容易/更好的解决方案是使用next_fast_lenfftpack.fft的第二个参数允许自动执行零填充:

代码语言:javascript
复制
fftpack.fft(a, next_fast_len(len(a)))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50346006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档