Ошибка числового fft для больших векторов: «ValueError: отрицательные измерения не допускаются» для n> 2 ** 28 - PullRequest
1 голос
/ 10 октября 2019

Я пытаюсь преобразовать Фурье довольно большой вектор (до n = 2**30). Когда это происходит, происходит сбой Python (появляется всплывающее окно с сообщением, что Python перестал работать). Подумав, возможно, у меня заканчивается память (хотя у меня есть 128 ГБ), попытался преобразовать Фурье немного меньшие векторыРаботает с n = 2**28, занимает около 210 с. Однако, когда я пытаюсь n = 2**29, это не работает:

import numpy as np

N = 2**29
x = np.random.rand(N)
X = np.fft.fft(x)

Выдает ошибку:

c:\program files\python36\lib\site-packages\numpy\fft\fftpack.py in fft(a, n, axis, norm)
    190     if n is None:
    191         n = a.shape[axis]
--> 192     output = _raw_fft(a, n, axis, fftpack.cffti, fftpack.cfftf, _fft_cache)
    193     if _unitary(norm):
    194         output *= 1 / sqrt(n)

c:\program files\python36\lib\site-packages\numpy\fft\fftpack.py in _raw_fft(a, n, axis, init_function, work_function, fft_cache)
     63     wsave = fft_cache.pop_twiddle_factors(n)
     64     if wsave is None:
---> 65         wsave = init_function(n)
     66 
     67     if a.shape[axis] != n:

ValueError: negative dimensions are not allowed

Что здесь происходит? Ограничен ли nfty fft n = 2**28?

...