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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1319閲覧

pythonを使用した行列をテキストファイルに出力

kamikura

総合スコア16

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/12/21 02:02

pythonを使用して、指定のテキストファイルからデータを読み込み、ソースコード中の計算式で計算した結果を出力しようとしています。
現在、出力という行為自体はうまくいっておりテキストファイル、またpython shellへの出力は出来ているのですが…。
行列として出力を行うと以下のような結果になってしまいます。

[1 2 3 4 5 6
7 8 9 10 11 12
13 14 ...]
[1a 2a 3a 4a 5a 6a
7a 8a 9a 10a 11a 12a
13a 14a...]

上記の様に6列複数行の形で出力されてしまいます()。
データ量が膨大なため、何十列となるのは分かっていますがこれを1行ずつの行列に変換できないでしょうか?
理想としては上記の出力結果を

[1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...]
[1a 2a 3a 4a 5a 6a 7a 8a 9a 10a 11a 12a 13a 14a ...]

のように出来ればと考えております。
質問内容が分かりにくければコメントでご指摘お願い致します。
宜しくお願いします。

以下、使用しているソースコードになります(3次元グラフも出力しますが、ソースコードは省いてあります)。

python

1from mpl_toolkits.mplot3d import Axes3D 2import matplotlib.pyplot as plt 3from matplotlib import cm 4from matplotlib.ticker import LinearLocator, FormatStrFormatter 5import math 6import numpy as np 7 8np.set_printoptions(threshold=np.inf) 9 10def MaxMinNormalization(x): 11 x = (x - np.min(x)) / (np.max(x) - np.min(x)); 12 return x 13 14def morlet(t): 15 f0=0.849 16 jisuans=np.power(np.pi,-1/4)*(np.cos(-2*np.pi*f0*t)-np.exp(-np.power(2*np.pi*f0,2)/2))*np.exp(-np.power(t,2)/2) 17 qyosuans=np.power(np.pi,-1/4)*np.sin(-2*np.pi*f0*t)*np.exp(-np.power(t,2)/2) 18 return jisuans,qyosuans 19 20f0=0.849 21 22#解析したいデータの読み込み 23x = np.arange(0.00,1.00,0.001) 24y = open("EMGwave_test.txt") 25 26lines1 = y.read() 27y.close() 28 29lines2 = lines1.split("\n") 30data=[] 31for line in lines2: 32 data.append(float(line)) 33y=data[0:1000] 34 35#Wavelet 36Hz=np.arange(50,100,1) 37aa=f0/Hz 38summ=[] 39for a in aa: 40 wbltb=[] 41 for b in x: 42 t=(x-b)/a 43 wblt1=1/math.sqrt(a)*sum(morlet(t)[0]*y) 44 wblt2=1/math.sqrt(a)*sum(morlet(t)[1]*y) 45 wblt=np.sqrt(wblt1*wblt1+wblt2*wblt2) 46 wbltb.append(wblt) 47 summ.append(wbltb) 48summ=np.array(summ) 49 50 51file = open("writing.txt","w") 52file.write(str(summ)) 53file.close() 54

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

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

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

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

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

can110

2018/12/21 02:05

出力結果は「[~]」で囲む、および区切り文字は空白である必要はありますか? すなわち「[1 2 3 4~]」ではなく「1,2,3,4,~」という出力でもかまいませんか?
kamikura

2018/12/21 02:09

数値ごとにカンマで区切る、ということでしょうか? 出力されたデータをmatlabで流用できる形であれば、どのような形でも構いません。 また流用出来ない、という場合でも現状では問題ない為どちらの形でも大丈夫です。
guest

回答1

0

ベストアンサー

これは "略式の" つまり読み易い object の文字列表現です。

https://docs.python.jp/3/library/stdtypes.html#str

str(summ)は人間が見て読みやすい文字列表現を返します。適当に略されたり丸められたりしますし、一般的な入力フォーマットとの親和性も低いので、データをdumpするような目的にはまったく向いていません。

そういう用途であればnumpy.savetxtあたりを使ってください。

numpy.savetxt — NumPy v1.15 Manual

投稿2018/12/21 02:15

hayataka2049

総合スコア30933

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

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

kamikura

2018/12/21 02:34

回答、ありがとうございます。 str文がそもそもそういった形で出力するものだったんですね…。 numpy.savetxtを使い方は上記のURLから確認してみましたが… 初歩的かもしれませんが、この場合はどういったソースコードになるのでしょうか…? ご教授いただければ幸いです。
hayataka2049

2018/12/21 02:37

np.savetxt("writing.txt", summ) とか書くととりあえず出力されます。 $ python >>> import numpy as np >>> np.savetxt("out", [[1,2,3],[4,5,6]]) >>> Ctrl-d $ cat out 1.000000000000000000e+00 2.000000000000000000e+00 3.000000000000000000e+00 4.000000000000000000e+00 5.000000000000000000e+00 6.000000000000000000e+00
kamikura

2018/12/21 02:47

頂いたコードで、上記のような形で出力されました! ありがとうございます。 こちら、最終列はどうしても改行されてしまうのでしょうか…? その形でもdumpするような目的で使用可であれば、この形でも大丈夫です。
hayataka2049

2018/12/21 02:50

>こちら、最終列はどうしても改行されてしまうのでしょうか…? ちょっと言いたいことがよくわからなかったので、詳しく説明してもらえると助かります。 np.savetxtで書き出したものは基本的にnp.loadtxtで読み込めます。使い方とかは検索すれば出てくるのでここでは書きませんが。
kamikura

2018/12/21 03:29

ごめんなさい、こちらの表示上の問題でした。 2行3列の形で出力出来ていることを確認できました。 ご丁寧にありがとうございました! np.loadtxtについてはこちらで検索してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問