LoginSignup
5
3

More than 5 years have passed since last update.

python numpyのリストと組み込みリストの違い?

Last updated at Posted at 2018-01-16

はじめに

python3をwindows10上で動かしており、とあるデータ処理をpythonで書いている途中でつまづいたので、ここでメモしておきます

データを取り出してグラフ表示

以下のようなテキストファイルからy軸、x軸の値をそれぞれ取り出してグラフ表示するために、pythonでプログラミングしているところでわからないことが出てきました。それが、以下にあるgenfromtxtの配列の扱いです。

mass.txt
0.1 , 1
0.4 , 2
0.1 , 3
0.8 , 4
0.6 , 5
0.3 , 6
...

genfromtxt

numpyのライブラリの中にテキストファイルからデータを簡単に取り出すことのできるfenfromtxtというものがありました。以下に例となるコードを示しておきます。

genfrom.py
import numpy as np
import matplotlib.pylab as plt

data=np.genfromtxt('mass.txt',delimiter=',')
x=data[:,0]
y=data[:,1]
plt.plot(x,y,label="data")
plt.legend()
plt.show

これはデータを取り込む部分とグラフ表示の部分を抜き出したものですが、genfromtxtの部分だけ取り出すと、以下のようになります。

data=np.genfromtxt('mass.txt',delimiter=',')
x=data[:,0]
y=data[:,1]

mass.txtファイルから","区切りでデータを読み込み、スライスでy軸、x軸それぞれの値を取り込んでいます。
ここで、もともとデータをリストにfloatで取り出しているため、

list=[[0.1 , 1] [0.4 , 2]...]
x=list[:,0]
y=list[:,1]

と書いたところTypeErrorとなり、
TypeError: list indices must be integers or slices, not tuple
と表示されてしまいました。
どうして、タプル扱いになったのか見当もつかなかったためとりあえず、data=genfromtxtのdataを出力させてみると、

[[0.1   1. ]
 [0.4   2. ]
 ...,
 [0.6   5. ]
 [0.3   6. ]]

と表示されました。この配列表記は文字列でもなく、要素間に","もないためどういう宣言をしたらこういう出力結果になるのかわかっていません...

とりあえず、ここまで頭を整理させるために書きました。また、わかったら編集しなおします。

:arrow_right: @LouiS0616 さんにコメントで教えていただきました。感謝します。
 genfromtxtによる配列はnumpyのndarryという多次元配列を用いており、pythonに組み込まれているリストとは出力結果自体も少し異なるみたいです。実際に自分でもやってみたのですが、配列の出力には","が入っていませんでした。numpyの配列はメモリ上に連続的に入れられるため変更不可ってことは、知っていたのですが、出力結果や使える文法も違うことは知りませんでした… 

出力結果
[0 1]

arr00.py
import numpy as np
a=np.array([0,1])
print(a)

自分はもともとpythonに組み込まれているリストを使いたかったのでfor文で書くことにします。
以下、@shiracamus さんに教えていただいたfor文でも1行で2次元配列の列だけを新しくリストに取り出す方法

出力結果
[1, 3, 5, 7, 9, 11]
[2, 4, 6, 8, 10, 12]

flist00.py
data=[[1,2],[3,4],[5,6],[7,8],[9,10],[11,12]]

x=[d[0] for d in data]
y=[d[1] for d in data]

print(x)
print(y)

リストを作り、その中でfor文を回せるなんて初めて知りました:frowning2:
感謝します。

5
3
11

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3