Bus errorとSegmentation faultに困ったら見るブログ

物理の研究者による日々の研究生活のメモ書きです ( python/emacs/html/Japascript/シェルスクリプト/TeX/Mac/C言語/Linux/git/tmux/R/ポケモンGO)

【numpy】複数のテキストデータを読み込んで1つのndarrayにまとめたい、2つのarrayを結合する

こんな感じのテキストデータがあって、これを読み込む

1 21
2 22
3 23
4 24
5 25

2列目のみ解析に使う、2列目のみ使うので1列目は捨てる

import numpy as np
fname="hoge.txt"
a = (np.loadtxt(fname, unpack=True))[1]

unpackのオプションがなんで必要かはいかの記事を参照

■ 過去記事 : Python を用いて実験データを読み込み、可視化する

これで1つのテキストファイルをndarrayに収納はできた
あとは、複数のファイルを読み込んで1つにまとめる

import numpy as np

for i in range(100):
 fname="hoge%d.txt" % (i)
 a = (np.loadtxt(fname, unpack=True))[1]

 if i == 0:
  b = a
 else:
  b = np.hstack((b, a))

これでbにすべての結果が入る
listにしといて、appendを使ったほうが早いのかもしれんけど、とりあえず動いたので良し



(追記)

このhstackで2つのarrayを結合している

https://deepage.net/features/numpy-stack.html#基本的な結合の仕方





(追記)

上の例だと、ファイルの通し番号順に上からarrayを作ってくれない
1つ目に開いたファイルの中身がarrayの一番最初に来て欲しい時は・・・

1 2
3 4
5 6
みたいな2列のデータを読み込みたい

for i in range(7, 21):
 fname = "hoge%d.txt" % i

 # ファイルサイズが0以上かチェック
 if os.path.getsize(fname) > 0:
  aa, bb = np.loadtxt(fname, unpack=True)

  if i == 7:
   a = aa
   b = bb
  else:
   a = np.hstack((a, aa))
   b = np.hstack((b, bb))
 else:
   print("error at %s" % fname)


(追記)

ある任意の列だけ読み込みたいときは、
np.loadtxt(fname, dtype=str, unpack=Truc, usecols=[0, 2, 3])

のように書く
これで、0, 2, 3列目のみ取り出せる

loadtxtでテキストファイルを読み込むときは、すべての列数が同じことが必要みたいで
通常は5個しか要素がないのに、ある行だけ6個要素があるとエラーになる
必要な列だけ書いて読み込むことで、そのエラーを回避することができる


ランキング参加中です

↓クリックしていただけると嬉しいです〜