亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Scipy FindPeaks 函數滾動應用 Pandas:類型錯誤

使用 Scipy FindPeaks 函數滾動應用 Pandas:類型錯誤

收到一只叮咚 2021-09-02 15:08:49
我正在使用 pandas.Series.Rolling.apply 功能中的scipy函數Find_Peaks尋求幫助。我拋出 TypeError: only size-1 arrays can be convert to Python scalars in my每次嘗試,我無法理解 1.) 為什么 2.) 如何正確編寫我的最終目標:從透視日期開始,找到信號中的歷史峰值。find_peaks 函數根據峰值屬性識別信號內的峰值。我正在使用 Mathworks -> prominence 方法中的突出方法有用示例該函數本身接受一個一維數組并返回一個元組(peaks:ndarray, properties:dict)。期望的輸出:x = np.ones((12,))x[3] = 10x[7] = 10x[11] = 10x = pd.Series(x)x.rolling(4).apply(lambda x: find_peaks(x,prominence=.2)[0])0      []1      []2      []3      [3]4      [3]5      [3]6      [3]7      [3,7]8      [3,7]9      [3,7]10     [3,7]11     [3,7]dtype: float64嘗試/錯誤消息:x.rolling(4).apply(lambda x: find_peaks(x,prominence=.2)[0])類型錯誤:只有大小為 1 的數組可以轉換為 Python 標量來自SO36680402發生此錯誤當函數需要單個值但您傳遞數組時,會引發錯誤“僅長度為 1 的數組可以轉換為 Python 標量”。但是,SO45254174似乎與此示例相矛盾:import numpy as npimport pandas as pdn = 3a = np.arange(5)df = pd.DataFrame(a, columns=['a'])def keep(window, windows):    windows.append(window.copy())    return window[-1]windows = list()df['a'].rolling(n).apply(keep, args=(windows,))df = df.tail(n)df['a_window'] = windows它將數組/向量添加到每個滾動塊,從而產生:   a         a_window2  2  [0.0, 1.0, 2.0]3  3  [1.0, 2.0, 3.0]4  4  [2.0, 3.0, 4.0]第一次嘗試:x.rolling(4).apply(lambda x: find_peaks(x,prominence=.2)[0])錯誤:類型錯誤:只有大小為 1 的數組可以轉換為 Python 標量第二次嘗試:def _find_peaks(array,prominence=.2):   peaks,_ = find_peaks(array,prominence=prominence)   return np.empty((0,0)) if peaks.shape[0]==0 else peaksx.rolling(4).apply(_find_peaks)類型錯誤:只有大小為 1 的數組可以轉換為 Python 標量關于如何寫作以及為什么我會拋出錯誤的任何想法將不勝感激!
查看完整描述

2 回答

?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

您可以做的是使用數組代替,并使用wlen參數 infind_peaks設置窗口長度而不是使用pd.rolling:


從文檔:


wlen :int 或 float,可選: 樣本中的窗口長度,可選擇將每個峰的評估區域限制為 x 的子集。峰值始終位于窗口的中間,因此給定的長度四舍五入為下一個奇數。這個參數可以加快計算


因此,您可以這樣做:


find_peaks(x.values, prominence=0.2, wlen=4)


(array([3, 7], dtype=int64),

 {'left_bases': array([2, 6], dtype=int64),

  'prominences': array([9., 9.]),

  'right_bases': array([4, 8], dtype=int64)})


查看完整回答
反對 回復 2021-09-02
  • 2 回答
  • 0 關注
  • 295 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號