Я хотел бы применить fft
к своим данным временного ряда, чтобы извлечь самые низкие 5 компонентов доминирующей частоты для прогнозирования значения y (количества бактерий) в конце каждого временного ряда. Мой код выглядит следующим образом:
df = pd.read_csv('/content/drive/My Drive/df.csv', sep=',')
X = df.iloc[0:2,0:10000]
dft_X = np.fft.fft(X) # What should I fill in for argument n?
print(dft_X)
print(len(dft_X))
plt.plot(dft_X)
plt.grid(True)
plt.show()
for i in dft_X:
m = i[np.argpartition(i,5)[:5]]
n = i[np.argpartition(i,range(5))[:5]]
print(m,'\n',n)
В scipy
do c на numpy.fft.fft
указано, что
numpy .fft.fft (a , n = Нет, ось = -1, норма = Нет)
...
n: int, необязательно
Длина преобразованной оси выхода. Если n меньше длины входа, вход обрезается. Если оно больше, ввод дополняется нулями. Если n не задано, используется длина входных данных вдоль оси, заданной осью.
Но мне все еще неясно, как влияет значение аргумента n на выходные данные и как решить, что значение для использования.
Я заметил, что когда n = 10
, вывод выглядит следующим образом:
# n= 10
# [-1.5 -1.11022302e-16j -0.46352549-1.42658477e+00j
# -1.21352549-8.81677878e-01j -1.21352549+8.81677878e-01j
# -0.46352549+1.42658477e+00j]
# [-1.5 -1.11022302e-16j -1.21352549-8.81677878e-01j
# -1.21352549+8.81677878e-01j -0.46352549-1.42658477e+00j
# -0.46352549+1.42658477e+00j]
, а когда n = 10000
, вывод выглядит следующим образом:
# n= 10000
# [-4752.15448944 +4113.44846878j -5199.36419709 -1826.78753048j
# -4659.45705354-13014.97971229j -4752.15448944 -4113.44846878j
# -5199.36419709 +1826.78753048j]
# [-5199.36419709 -1826.78753048j -5199.36419709 +1826.78753048j
# -4752.15448944 -4113.44846878j -4752.15448944 +4113.44846878j
# -4659.45705354-13014.97971229j]
Что определяет правильное значение n для использования? Кроме того, почему выходные значения комплексных чисел? Любая помощь приветствуется.
Вот график временных рядов для справки: