前提・実現したいこと
python3.6のScipyライブラリを使って、あるデータの極値を求めた後に、そのデータをテキストファイルに書き出したいと考えています。
argrelmax()、argrelmin()という関数を使えば、Numpy配列から作ったグラフの極値のインデックスをタプルとして取得できることを知り、値は上手く取得できたのですが、ファイルに書き出す行程が上手くいきません。
発生している問題
ソースコードを実行して得られたmaxid.txtの内容はこのようになっています。
実現したいのは「リストの各要素を、要素ごとに改行して書き出すこと」なのですが、コードをどういじっても上画像のように改行がなされていない状態で書き出されてしまいます。
該当のソースコード
python3.6
1#!/usr/bin/env python 2# -*- coding: utf-8 -*- 3 4""" 5包絡線を書く用 6""" 7 8import numpy as np 9import scipy.constants as sc 10from scipy import signal 11 12 13with open('e_center.txt') as f: 14 e_center_raw = [float(s.strip()) for s in f.readlines()] 15 16e_center_raw_n = np.array(e_center_raw) 17 18maxid = signal.argrelmax(e_center_raw_n, order=1) 19minid = signal.argrelmin(e_center_raw_n, order=1) 20 21e_center_env = e_center_raw_n[maxid] 22 23maxid_list = list(maxid) 24 25print(type(e_center_raw)) 26print(type(maxid_list)) 27 28 29f = open('e_center_envelope.txt', 'w') 30for x in e_center_env: 31 f.write(str(x) + "\n") 32f.close() 33 34f2 = open('maxid.txt', 'w') 35for x in maxid_list: 36 f2.write(str(x) + "\n") 37f2.close() 38
再現用のデータ
再現のために、e_center.txtの一部を掲載します。
テキストファイルにそのままコピペしていただけると動作するかと思います。
e_center.txt
10.0 20.001486350805133923 3-0.001370395441008766 4-0.006461896813117832 50.0035373535843143357 60.009529589100946777 7-0.004863959040997524 8-0.009604910281416804 90.006383766243110222 100.009204852883105241 11-0.007315931035538903 12-0.00804661485998421 130.007757543056704388 140.0074505017427512945 15-0.009159180744849543 16-0.0056122667115962935 170.00946732129565388 180.004594506318195885 19-0.010875347075679444 20-0.001852412310950356 210.010578854246507466 220.00021943336885932307 23-0.011418268651651279 240.003346981127089012 250.010049723437427285 26-0.005384553807738425 27-0.009702031456003778 280.008986243488442671 290.006979481113893477 30-0.010539925079383072 31-0.005008565518069936 320.012568843044166625 330.0011940824172798651 34-0.012316627475089369 350.0021932664084554987 360.01105415615608661 37-0.005796930674191281 38-0.00834797897375562 390.009202176954310727 400.0035279446187524138 41-0.010091475544778131 420.00023192432424991912 430.011100960254291761 44-0.006249218592027303 45-0.006948449515846452 460.007713248965490809 470.004293716144453561 48-0.010954991211140085 490.003615802164635918 500.007401873567806184 51-0.006934483375269925
試したこと
タプルをリストに変換する際に問題があるのかと思い、Numpyのcopyとtolistを用いて一度Numpy配列に変換した後、再度tolistを使ってリストに変換するということも行いましたが、上手くいきませんでした。
copyライブラリを用いようともしましたが、サポートが終了(?)しており、インストールができませんでした。
補足情報(FW/ツールのバージョンなど)
scipy 1.5.4
numpy 1.19.5
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/01/16 15:24