【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]
listの要素の型は何でも良い

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

import array
ary = array.array('i',[1, 3.14, 'python', [2, 4]])
# TypeError: integer argument expected, got float
arrayでは異なる型は混在できない

上の例では、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はimportが必要

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

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

 

 listとNumPy配列

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

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

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に戻る