Xtra etc

日記系雑記ブログ: 農業、データサイエンス、自然

【スポンサーリンク】

Python におけるデータ配列

リストによる配列

配列は、組み込みデータ構造で作成できます。最適なのは list オブジェクトです。
単純な list は1 次元配列ですね。

v=[0.5, 0.75, 1.0, 1.5, 2.0]

list オブジェクトはどんなオブジェクトも要素にすることができます。他の list オブジェクトも要素にできます。入れ子 list オブジェクトにより 2 次元以上の配列も簡単に作成できます。

m = [v, v, v]
m
#出力例
[[0.5, 0.75, 1.0, 1.5, 2.0],
 [0.5, 0.75, 1.0, 1.5, 2.0],
 [0.5, 0.75, 1.0, 1.5, 2.0]]

行は、二重インデックスの要素をインデックスで参照できます。

m[1]
#出力例
[0.5, 0.75, 1.0, 1.5, 2.0]
m[1][0]
#出力例
0.5

入れ子を使うとさらに複雑な構造も出来ます。

v1 =  [0.5, 1.5]
v2 = [1, 2]
m = [v1, v2]
c = [m, m]
c
#出力例
[[[0.5, 1.5], [1, 2]], [[0.5, 1.5], [1, 2]]]
c[1][1][0]

このようなオブジェクトの構成は一般に、元のオブジェクトへの参照によります。

v = [0.5, 0.75, 1.0, 1.5, 2.0]
m = [v, v, v]
m
#出力例
[[0.5, 0.75, 1.0, 1.5, 2.0],
 [0.5, 0.75, 1.0, 1.5, 2.0],
 [0.5, 0.75, 1.0, 1.5, 2.0]]

v の第一要素の値を変えると m に何が起こるのでしょうか。

v[0] = 'Python'
m
#出力例
[['Python', 0.75, 1.0, 1.5, 2.0],
 ['Python', 0.75, 1.0, 1.5, 2.0],
 ['Python', 0.75, 1.0, 1.5, 2.0]]

Python の配列クラス

Python には専用の array モジュールがあります。次のコードは list オブジェクトから array オブジェクトをインスタンス化します。

v = [0.5, 0.75, 1.0, 1.5, 2.0]
import array
a = array.array('f', v)
a
#出力例
array('f', [0.5, 0.75, 1.0, 1.5, 2.0])
a.append(0.5)
a
#出力例
array('f', [0.5, 0.75, 1.0, 1.5, 2.0, 0.5])
a.extend([5.0, 6.75])
a
#出力例
array('f', [0.5, 0.75, 1.0, 1.5, 2.0, 0.5, 5.0, 6.75])
2 * a
#出力例
array('f', [0.5, 0.75, 1.0, 1.5, 2.0, 0.5, 5.0, 6.75, 0.5, 0.75, 1.0, 1.5, 2.0, 0.5, 5.0, 6.75])

array クラスには、組み込みのファイルへの格納、検索機能を持っているという利点があります。

f =  open ('array.apy', 'wb')
a.tofile(f)
f.close()

with open('array.apy', 'wb') as f:
    a.tofile(f)
!ls -n arr*
-rw-r--r--  1 502  20  32  4  9 20:10 array.apy

ディスクからデータを読み込む場合であっても、array オブジェクトのデータ型が重要です。

b = array.array('f')
with open('array.apy', 'rb') as f:
    b.fromfile(f, 5)
b
#出力例
array('f', [0.5, 0.75, 1.0, 1.5, 2.0])
b = array.array('d')
with open('array.apy', 'rb') as f:
    b.fromfile(f,2)
b
#出力例
array('d', [0.0004882813645963324, 0.12500002956949174])

【スポンサーリンク】