如何解决在 Python 中获取 nan 熵?

How to Solve Getting nan Entropy in Python?

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

所以我选择pywt in python, and now I have the below code for getting wavelet and entropy from each frequency band ( for example I'm using D2 ), and here是数据的link:

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 值?

你的问题是小波变换的第二个频带的结果中的负数。负数的对数导致 nan 使用 numpyValueError: math domain error 使用 python 的 math 库引发异常。

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

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