【问题标题】:How to Solve Getting nan Entropy in Python?如何解决在 Python 中获取 nan Entropy?
【发布时间】:2021-12-03 18:26:06
【问题描述】:

基于这篇关于脑机接口的论文,我想使用离散小波变换提取时频域特征,然后用给定方程计算能量和熵。

所以我在 python 中选择了pywt,现在我有以下代码用于从每个频带获取小波和熵(例如我使用 D2),here 是数据的链接:

import numpy as np
data = np.loadtxt('data.txt')

import pywt
cA5, cD5, cD4, cD3, cD2, cD1  = pywt.wavedec(data,'db4',mode='symmetric',level= 5)


Ent = 0 
for d in data:
    E = d**2
    p = cD2 * E
    Ent -= np.sum( np.abs( p * np.log(p) ) ) 
print(Ent)

但我得到nan 每个频段的熵。如何解决获取小波熵的 nan 值?

【问题讨论】:

  • data 在哪里定义? // 请发布 SSCCE
  • 数据基于 DEAP 数据集。
  • 可能是这种情况,但在您发布的代码中未定义。如果没有对正在发生的事情的全貌,就无法提供太多帮助。我认为您发布的内容没有问题,因此问题必须出在未发布的代码上。
  • 我已经更新了我的问题,现在我使用的是一个简单的数据,您可以下载并使用它。
  • 看起来你在平方k,而不是D_j(k)

标签: python signal-processing wavelet time-frequency pywt


【解决方案1】:

您的问题是小波变换的第二个频带结果为负数。负数的对数导致使用numpynan 和使用python 的math 库的ValueError: math domain error 引发异常。

顺便说一句,我认为您在实施公式时犯了一个错误。我认为这是正确的实现:

ENT2 = -np.dot(np.log(np.square(cD2)), np.square(cD2))
ENG = np.square(cD2).sum()

【讨论】:

    猜你喜欢
    • 2017-03-02
    • 2015-05-25
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    • 2018-11-01
    • 2016-12-20
    • 2021-06-17
    • 1970-01-01
    相关资源
    最近更新 更多