【问题标题】:how to calculate dominant frequency use numpy.fft in python如何计算主导频率在python中使用numpy.fft
【发布时间】:2020-08-14 05:39:58
【问题描述】:

我有这个关于车辆振动的数据框,我想计算振动的主频率。我知道我们可以使用 numpy.fft 来计算它,但我不知道如何将 numpy.fft 应用于我的数据框。 请告诉我如何在python中做到这一点。 谢谢。

【问题讨论】:

  • 如果您可以共享示例数据,将会很有帮助。
  • 我想分享我的示例数据,但我该怎么做呢?

标签: python pandas numpy fft vibration


【解决方案1】:

数据框列实际上是一个 NumPy 数组

df = pd.DataFrame({"Vibration":[random.uniform(2,10) for i in range(10)]})
df["fft"] = np.fft.fft(df["Vibration"].values)
print(df.to_string())

输出

   Vibration                  fft
0   8.212039  63.320213+0.000000j
1   5.590523   2.640720-2.231825j
2   8.945281  -2.977825-5.716229j
3   6.833036   4.657765+5.649944j
4   5.150939  -0.216720-0.445046j
5   3.174186  10.592292+0.000000j
6   9.054791  -0.216720+0.445046j
7   5.830278   4.657765-5.649944j
8   5.593203  -2.977825+5.716229j
9   4.935937   2.640720+2.231825j

每 15 行批处理一次

df = pd.DataFrame({"Vibration":[random.uniform(2,10) for i in range(800)]})

df.assign(
    fft=df.groupby(df.index // 15)["Vibration"].transform(lambda s: np.fft.fft(list(s)).astype("object")),
    grpfirst=df.groupby(df.index // 15)["Vibration"].transform(lambda s: list(s)[0])
)


【讨论】:

  • 谢谢!我的数据框中有 800 行,是否可以计算每 15 行的 fft?
  • 谢谢!我可以知道,为什么 grpfirst 和 fft 给出不同的值?
  • 我不是 Quant,所以不熟悉 calc 的数学 ...
【解决方案2】:

在不知道 DataFrame 的外观以及需要使用哪些字段进行计算的情况下,您可以使用 .apply() 将任何函数应用于 dataframe

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.apply.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    相关资源
    最近更新 更多