質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

667閲覧

Scipyのargrelmaxを使って極値を算出したが、適切な形でファイルに書き出すことが出来ない。

ShibaSamo

総合スコア15

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2022/01/16 14:33

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

numpy.loadtxt()numpy.savetxt() を使ってみてはどうでしょうか。

python

1import numpy as np 2import scipy.constants as sc 3from scipy import signal 4 5e_center_raw_n = np.loadtxt('e_center.txt') 6 7maxid = signal.argrelmax(e_center_raw_n, order=1) 8minid = signal.argrelmin(e_center_raw_n, order=1) 9e_center_env = e_center_raw_n[maxid] 10 11np.savetxt('e_center_envelope.txt', e_center_env, fmt='%.18f') 12np.savetxt('maxid.txt', maxid[0], fmt='%d')

maxid.txt

text

11 25 39 412 516 620 724 827 931 1035 1138 1242 1345 1449

投稿2022/01/16 14:55

編集2022/01/16 15:09
melian

総合スコア19618

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ShibaSamo

2022/01/16 15:24

ありがとうございます! loadtxtとsavetxtを完全に失念していました...! おかげさまで無事書き出しが行えました! 先日も回答いただき本当に感謝いたします!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問