【Python】listとarrayとNumPy配列の違い

PythonのTopに戻る


 

 listの要素の型は何でも良い

まず前提として、CやJAVAなどで「配列」と呼ばれているものがPythonで言うところの「array」に相当しており、

    1. 隣り合う要素がメモリ上で連続している
    2. 同じ型の変数しか保持できない

という特徴をもっている。Pythonでの「list」は要素がメモリ上で連続している保証は無いが、要素の型は基本的に何でも良いという点で使いやすい。特にプログラミング初学者にとっては、配列の型をいちいち気にしなくて良いのでコーディングがラクにできるというメリットがある。

list = [1, 3.14, 'python', [2, 4]]
for i in list:
    print(i)

# 1
# 3.14
# python
# [2, 4]

一方で配列(array)の場合は、異なる型の要素を格納できない。

import array
ary = array.array('i',[1, 3.14, 'python', [2, 4]])
# TypeError: integer argument expected, got float

上の例では、int型だと思って読み込んだのにfloat型が渡されたんだけど、と怒られる。因みに ‘i’ でint型の要素からなるarrayであると指定している。array型を宣言する際は第1引数に型の種類を与える必要がある。

 

 arrayはインポートが必要

arrayはインポートが必要である点もlistとの大きな違いである。

import array
ary = array.array('i', [1, 1, 2, 3, 5, 8])
for i in ary:
    print(i)

# 1
# 1
# 2
# 3
# 5
# 8

 arrayは基本的に数値型を要素とする

これはlistとの違いというよりもarray型の特徴だが、arrayには基本的に数値型の要素を格納する。文字列やリストを要素とすることはできない。

 

 listとNumPy配列

Pythonの数値計算ライブラリである「NumPy」をインポートすればNumPy配列が利用できる。NumPy配列ではリスト型を要素とするため、当然リストと同様に異なる型の変数を格納することができる。

NumPy配列は数値計算に特化しており、listよりも簡単に行列計算を行うことができる。ary.T などとすれば容易に転置行列を得ることができる。

#多次元NumPy配列の例

import numpy as np
ary = np.array([[[1, 2, 3], [10, 20, 30]],
                [[-1, -2, -3], [-10, -20, -30]]])
print(ary[0][1])
# [10 20 30]

print(ary.T)
# [[[  1  -1]
#   [ 10 -10]]
# 
#  [[  2  -2]
#   [ 20 -20]]
# 
#  [[  3  -3]
#   [ 30 -30]]]

※ NumPy配列の演算処理が組み込みのリストに比べて高速である理由についてはこちらで解説している。


PythonのTopに戻る