【问题标题】:FFT with python from a data file从数据文件中使用 python 进行 FFT
【发布时间】:2017-10-28 23:34:03
【问题描述】:

我有很多数据文件(testfft.dat),分为三列

垃圾 | x | f(x)

100, 1, 0.129

100、2、0.198

等等

其中 ',' 是分隔符。我试图在 f(x) 列上进行快速傅立叶变换,然后绘制光谱与 x 的关系。我试图在另一个 answer 之后这样做,但我无法让它工作。而且,我根本不懂python,我用xmgrace做FFT,但效率不高。

我做了以下(在 ipython 上)

import numpy as np
import scipy as sy
import scipy.fftpack as syfp

array = np.loadtxt("testfft.dat")

但是当我执行最后一行时出现此错误

ValueError                                Traceback (most recent call last)
<ipython-input-5-f42979d3ce2b> in <module>()
----> 1 array = np.loadtxt("testfft.dat")

~/.local/lib/python3.5/site-packages/numpy/lib/npyio.py in loadtxt(fname, dtype, comments, delimiter, converters, skiprows, usecols, unpack, ndmin)
   1022 
   1023             # Convert each value according to its column and store
-> 1024             items = [conv(val) for (conv, val) in zip(converters, vals)]
   1025             # Then pack it according to the dtype's nesting
   1026             items = pack_items(items, packing)

~/.local/lib/python3.5/site-packages/numpy/lib/npyio.py in <listcomp>(.0)
   1022 
   1023             # Convert each value according to its column and store
-> 1024             items = [conv(val) for (conv, val) in zip(converters, vals)]
   1025             # Then pack it according to the dtype's nesting
   1026             items = pack_items(items, packing)

~/.local/lib/python3.5/site-packages/numpy/lib/npyio.py in floatconv(x)
    723         if b'0x' in x:
    724             return float.fromhex(asstr(x))
--> 725         return float(x)
    726 
    727     typ = dtype.type

ValueError: could not convert string to float: b'10,'

由于我不是很了解 Python,所以我不知道从这里开始做什么。

有没有办法从答案修改脚本来做我需要的?

谢谢。

【问题讨论】:

  • 欢迎来到stackoverflow!您引用的答案提供了一个最小、完整且可验证的示例:stackoverflow.com/help/mcve。请编辑您的问题以执行相同的操作。您尝试了哪些特定的代码/数据,当它不适合您时出现了哪些诊断错误?我们想帮助你。帮助我们为您提供帮助。
  • @J_H 感谢您的建议,我已尽我所能编辑了我的问题。

标签: python numpy


【解决方案1】:

您的标题与行的分隔符 (|) 不同。所以我们首先需要跳过标题,然后给列名(垃圾,x,f)。然后使用 scipy 的 fft 得到离散变体:

import numpy as np
from scipy.fftpack import fft

df = np.genfromtxt('testfft.dat', skip_header=1, names=['trash','x','f'], delimiter=',')
print(fft(df['f']))
[ 0.327+0.j -0.069+0.j]

你可以在这里找到文档:FFT

【讨论】:

  • 效果很好。现在我将尝试做一个脚本,在我的 56 个文件上循环。谢谢@sharatpc
  • @sempiternal 很乐意为您提供帮助。很高兴您能接受答案。
  • 为什么要打印 fft(fft(df['f'])) 而不仅仅是 fft(df['f'])? @sharatpc
  • 已编辑。想要显示第二个订单也是可能的。
  • 哦,我明白了。所以我做得很好
猜你喜欢
  • 2017-09-11
  • 1970-01-01
  • 1970-01-01
  • 2015-02-03
  • 2016-11-23
  • 2014-09-07
  • 1970-01-01
  • 1970-01-01
  • 2016-09-10
相关资源
最近更新 更多