前提・実現したいこと
python3で、波形のピーク値検出のメソッドを作成しようと思っています。
inputは、pandasのseriesで、ロジックは、離散値の2点を順番に読み込み、それらのPeakを更新していくプログラムとなります。
イメージとしては下記となります。
発生している問題・エラーメッセージ
一通りロジックを作成したのですが、下記エラーが出てきて先に進めなくなってしまいました。
ネットで検索してみたのですが、解決方法がよくわかりませんでした。。。
---> 19 if (wav.iloc[i] * wav.iloc[i+1] < 0): ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
解決したいこと
①エラーコードが出ている原因が知りたい(下記コードがなぜNGか)
②他にプログラム上、まずいところがあればご教示いただきたい
該当のソースコード
ソースコードは下記となります。
Python3
1 2def f_A95pp(wav=None): 3 # peakのリスト 4 peaks = pd.Series([0]) 5 6 # 各サンプルごとのpeak(最大の絶対値)のみを格納していく。 7 for i, _ in enumerate(wav): 8 if i == len(wav)-1: 9 break 10 11 print(i, wav.iloc[i], wav.iloc[i+1], type(wav.iloc[i]), type(wav.iloc[i+1])) 12 # i,i+1サンプルの積が負の場合は次のpeakの入れ物を作る。 13 if (wav.iloc[i] * wav.iloc[i+1] < 0): 14 print("***i:{}, i+1:{}***".format(wav.iloc[i], wav.iloc[i+1])) 15 peaks.append(wav.iloc[i:i+1].copy().abs()) 16 print("peaks_len:{}***".format(len(peaks))) 17 # peaksの末尾のデータを越えた値がくる場合は、peaksの末尾を更新 18 elif(abs(peaks.iloc[-1]) < abs(wav.iloc[i])): 19 peaks.iloc[-1] = wav.iloc[i].copy() 20 21 print("peaks:",peaks) 22 23 # peaksが2個以下(1周期着てない場合)は、Noneを代入する。 24 if(len(peaks) < 2): 25 peaks = None 26 27 # peak_max(peakの最大値をとる。) 28# print(peaks) 29 dif_peak = peaks.iloc[0:-1].copy()-peaks.iloc[1:].copy() 30 peak_max = dif_peak.max() 31 32 # p2p:peaksのリスト(indexが,時間tとなっている) 33 p2p = dif_peak.abs() 34 print("temp:",temp) 35 p2p.sort_index(ascending=False) 36# temp.sort(key=lambda x: x[1], reverse=True) # 37 38 # PA95(peaksの上位5%を除いた値のリストの中の最大値を取りたい) 39 temp_a95pp = p2p[round(len(ptp)*0.95+0.5):] 40 print("temp_a95pp:",temp_a95pp) 41 42 if temp_a95pp is None: 43 a95pp = 0 44 else: 45 a95pp = max(temp_a95pp) 46 47 return (peak_max, a95pp, ptp) 48
試したこと
エラーコードについて検索した。
テストコードを描いて試してみた。
補足情報(FW/ツールのバージョンなど)
Python3.6
ご回答いただけましたら幸甚に存じます。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/19 14:09