python實(shí)現(xiàn)信號(hào)時(shí)域統(tǒng)計(jì)特征提取代碼
1.實(shí)驗(yàn)數(shù)據(jù)需求
為了對(duì)采集的壓力實(shí)驗(yàn)數(shù)據(jù)做特征工程,需要對(duì)信號(hào)進(jìn)行時(shí)域的統(tǒng)計(jì)特征提取,包含了均值、均方根、偏度、峭度、波形因子、波峰因子、脈沖因子、峭度因子等,現(xiàn)用python對(duì)其進(jìn)行實(shí)現(xiàn)。
2.python實(shí)現(xiàn)
其中的輸入?yún)?shù)含義:
① data:實(shí)驗(yàn)數(shù)據(jù)的DataFrame
② p1:所截取實(shí)驗(yàn)信號(hào)的起始采樣點(diǎn)位置
③ p2:所截取實(shí)驗(yàn)信號(hào)的終止采樣點(diǎn)位置
from pandas import Series import math pstf_list=[] def psfeatureTime(data,p1,p2): #均值 df_mean=data[p1:p2].mean() #方差 df_var=data[p1:p2].var() #標(biāo)準(zhǔn)差 df_std=data[p1:p2].std() #均方根 df_rms=math.sqrt(pow(df_mean,2) + pow(df_std,2)) #偏度 df_skew=data[p1:p2].skew() #峭度 df_kurt=data[p1:p2].kurt() sum=0 for i in range(p1,p2): sum+=math.sqrt(abs(data[i])) #波形因子 df_boxing=df_rms / (abs(data[p1:p2]).mean()) #峰值因子 df_fengzhi=(max(data[p1:p2])) / df_rms #脈沖因子 df_maichong=(max(data[p1:p2])) / (abs(data[p1:p2]).mean()) #裕度因子 df_yudu=(max(data[p1:p2])) / pow((sum/(p2-p1)),2) featuretime_list = [df_mean,df_rms,df_skew,df_kurt,df_boxing,df_fengzhi,df_maichong,df_yudu] return featuretime_list
3.結(jié)果與說(shuō)明

補(bǔ)充拓展:python數(shù)據(jù)結(jié)構(gòu)與算法--回溯算法詳解
回溯算法:一種優(yōu)先搜索算法(試探法);按優(yōu)條件向前搜索,以達(dá)目標(biāo);當(dāng)試探到某步,發(fā)現(xiàn)原來(lái)選擇并不好(走不通),就退回重新選擇。
回溯算法的一般步驟:1:定義問(wèn)題的解空間(搜索中動(dòng)態(tài)生成);2:確定易搜索的解空間結(jié)構(gòu)(一般為樹(shù)形結(jié)構(gòu)或圖);3:以深度優(yōu)先的方式搜索解空間,搜索中用剪枝函數(shù)避免無(wú)效搜索。
剪枝函數(shù):1:用約束函數(shù)在擴(kuò)展節(jié)點(diǎn)處減去不滿(mǎn)足約束條件的子樹(shù);2:用限界函數(shù)減去不能得到最優(yōu)解的子樹(shù)。
回溯法:實(shí)戰(zhàn)
1:電話號(hào)碼的字母組合
方法:回溯(適用于組合問(wèn)題)
class Solution:
def letterCombination(self,digits):
phone={'2': ['a', 'b', 'c'],
'3': ['d', 'e', 'f'],
'4': ['g', 'h', 'i'],
'5': ['j', 'k', 'l'],
'6': ['m', 'n', 'o'],
'7': ['p', 'q', 'r', 's'],
'8': ['t', 'u', 'v'],
'9': ['w', 'x', 'y', 'z']}
res=[]#存放組合結(jié)果
def backtrack(combination,next_digits):#回溯函數(shù)
#combination目前已經(jīng)產(chǎn)生的組合,next_digits:輸入的下一個(gè)字符
if len(next_digits)==0: #遞歸出口
res.append(combination)
else:
for i in phone[next_digits[0]]:
backtrack(combination+i,next_digits[1:]) #遞歸實(shí)現(xiàn)回溯
if digits:
backtrack('',digits) #初始化
return res
2:全排列
輸入: [1,2,3]
輸出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
class Solution:
def permute(self,nums):
res=[] #存放組合結(jié)果
size=len(nums)
def backtrack(combination,nums):
#combination目前已經(jīng)產(chǎn)生的組合,nums為剩下的數(shù)組
#遞歸出口
#遞歸的結(jié)束一定 要有return
if len(combination)==size:
res.append(combination)
return #注意
for i in range(len(nums)):
backtrack(combination+[nums[i]],nums[:i]+nums[i+1:]) #遞歸回溯
backtrack([],nums)
return res
if __name__=='__main__':
nums = [1,2,3]
solution=Solution()
print(solution.permute(nums))
3:數(shù)字組合
輸入: candidates = [2,3,6,7], target = 7,
所求解集為:
[
[7],
[2,2,3]
]
class Solution:
def combinationArray(self,candidates,target):
candidates.sort()
res=[] #存放組合結(jié)果
size=len(candidates)
def backtrack(combination,cur_sum,j):
#combination目前已經(jīng)產(chǎn)生的組合,cur_sum當(dāng)前計(jì)算和,j用于控制求和的查找范圍起點(diǎn)
#遞歸出口
if cur_sum>target:
return
if cur_sum==target:
res.append(combination)
for i in range(j,size): #j避免重復(fù)
if cur_sum+candidates[i]>target: #約束函數(shù)(剪)
break
j=i
backtrack(combination+[candidates[i]],cur_sum+candidates[i],j)#遞歸回溯
backtrack([],0,0)
return res
if __name__=='__main__':
candidates = [2,3,6,7]
target = 7
solution=Solution()
print(solution.combinationArray(candidates,target))
4:
N皇后問(wèn)題
class Solution:
def solveNqueen(self,n):
res=[] #存放結(jié)果組合,對(duì)于N皇后問(wèn)題,這里存放的是其放在每一行對(duì)應(yīng)的列下標(biāo)
def backtrack(combination):
if len(combination)==n:
res.append(combination)
return
for j in range(n):
if combination:
#排除當(dāng)前行,列和對(duì)應(yīng)的兩個(gè)對(duì)角線。
if j not in combination and j!=combination[-1]+1 and j!=combination[-1]-1:#約束條件
backtrack(combination+[j]) #遞歸回溯
else:
continue
else:
backtrack(combination+[j])
backtrack([]) #回溯初始化
#轉(zhuǎn)化為需要的格式
output=[["." * k + "Q" + "." * (n - k - 1) for k in i] for i in res] #列表生成器
return output
if __name__=='__main__':
n=4
solution=Solution()
print(solution.solveNqueen(n))
5:子集
[1,2,3]的子集[[], [1], [1, 2], [1, 2, 3], [1, 3], [2], [2, 3], [3]]
class Solution(object):
def subsets(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
res=[]#存放組合結(jié)果
size=len(nums)
def backtrack(combination,nums):
#combination目前已經(jīng)產(chǎn)生的組合,nums為剩下的數(shù)組
if len(combination)<=size:
res.append(combination)
#遞歸出口
#遞歸的結(jié)束一定 要有return
if len(combination)==size:
return
for i in range(len(nums)):
backtrack(combination+[nums[i]],nums[i+1:]) #遞歸回溯
backtrack([],nums)
return res
if __name__=='__main__':
nums=[1,2,3]
solution=Solution()
print(solution.subsets(nums))
6:
字母大小寫(xiě)的全排列
給定一個(gè)字符串S,通過(guò)將字符串S中的每個(gè)字母轉(zhuǎn)變大小寫(xiě),我們可以獲得一個(gè)新的字符串。返回所有可能得到的字符串集合。
輸入: S = "a1b2"
輸出: ["a1b2", "a1B2", "A1b2", "A1B2"]
class Solution:
def letterpermute(self,S):
res=[]
size=len(S)
def backtrack(combination,S):
if len(combination)==size:
res.append(''.join(combination))
return
for i in range(len(S)):
if "a"<=S[i]<= "z" or "A"<=S[i]<= "Z":
for j in range(2):
if j==0:
backtrack(combination+[S[i].lower()],S[i+1:])
if j==1:
backtrack(combination+[S[i].upper()],S[i+1:])
else:
backtrack(combination+[S[i]],S[i+1:])
backtrack([],S)
return res
if __name__=='__main__':
S=[i for i in "1B2"]
solution=Solution()
print(solution.letterpermute(S))
7:生成括號(hào)
括號(hào)生成:給出 n 代表生成括號(hào)的對(duì)數(shù),請(qǐng)你寫(xiě)出一個(gè)函數(shù),使其能夠生成所有可能的并且有效的括號(hào)組合。
例如,給出 n = 3,生成結(jié)果為:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
class Solution:
def generateParenthesis(self,n):
res=[] #存放組合結(jié)果
def backtrack(combination,left,right):
#combination目前已經(jīng)產(chǎn)生的組合
if len(combination)==2*n: #遞歸出口
res.append(combination)
#對(duì)于有效的括號(hào),左邊先出
if left<n:
backtrack(combination+'(',left+1,right)#遞歸實(shí)現(xiàn)回溯
if right<left:
backtrack(combination+')',left,right+1)#遞歸實(shí)現(xiàn)回溯
backtrack('',0,0) #初始化
return res
if __name__=='__main__':
n=3
solution=Solution()
print(solution.generateParenthesis(n))
以上這篇python實(shí)現(xiàn)信號(hào)時(shí)域統(tǒng)計(jì)特征提取代碼就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python練習(xí)之制作企業(yè)獎(jiǎng)金計(jì)算器
在本篇博客中,我們將使用Python代碼解決一個(gè)企業(yè)獎(jiǎng)金計(jì)算的問(wèn)題,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-06-06
Python實(shí)現(xiàn)字符串逆序輸出功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)字符串逆序輸出功能,結(jié)合具體實(shí)例形式分析了Python針對(duì)字符串的遍歷、翻轉(zhuǎn)、排序等相關(guān)操作技巧,需要的朋友可以參考下2017-06-06
Python pickle類(lèi)庫(kù)介紹(對(duì)象序列化和反序列化)
這篇文章主要介紹了Python pickle類(lèi)庫(kù)介紹(對(duì)象序列化和反序列化),本文講解了pickle庫(kù)的作用、pickle的運(yùn)行過(guò)程、使用實(shí)例、修改picklable類(lèi)型的默認(rèn)行為等內(nèi)容,需要的朋友可以參考下2014-11-11
自動(dòng)轉(zhuǎn)換Python代碼為HTML界面的GUI庫(kù)remi使用探究
這篇文章主要為大家介紹了自動(dòng)轉(zhuǎn)換Python代碼為HTML界面的GUI庫(kù)remi使用探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
在Python中操作時(shí)間之tzset()方法的使用教程
這篇文章主要介紹了在Python中操作時(shí)間之tzset()方法的使用教程,是Python學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-05-05
解析Python 偏函數(shù)用法全方位實(shí)現(xiàn)
這篇文章主要介紹了解析Python 偏函數(shù)用法全方位實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
解決phantomjs截圖失敗,phantom.exit位置的問(wèn)題
今天小編就為大家分享一篇解決phantomjs截圖失敗,phantom.exit位置的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05

