NumPy配列ndarrayとPython標準のリストを相互に変換

NumPy配列ndarrayとPython標準のリスト型listは相互に変換できます。

リスト型listをNumPy配列ndarrayに変換: numpy.array() NumPy配列ndarrayをリスト型listに変換: tolist()

なお、便宜上「変換」という言葉を使っているが、実際は元のオブジェクトはそのままで新たな型のオブジェクトが生成される。

リストをNumPy配列ndarrayに変換: numpy.array()

NumPy配列numpy.ndarrayを生成するnumpy.array()の引数にPythonリスト型のオブジェクトを渡すと、リストを元にndarrayが生成される。

import numpy as np

l_1d = [0, 1, 2]

arr_1d = np.array(l_1d)

print(arr_1d)
print(arr_1d.dtype)
# [0 1 2]
# int64

生成されるndarrayのデータ型dtypeは元のリストから自動で決定されるが、引数dtypeで指定することもできます。 NumPyのデータ型dtypeについては以下の記事を参照。

arr_1d_f = np.array(l_1d, dtype=float)

print(arr_1d_f)
print(arr_1d_f.dtype)
# [0. 1. 2.]
# float64

2次元以上の多次元配列でも同様。

l_2d = [[0, 1, 2], [3, 4, 5]]

arr_2d = np.array(l_2d)

print(arr_2d)
# [[0 1 2]
#  [3 4 5]]

なお、Python標準のリストの多次元配列は単なるネストしたリスト(リストのリスト)なので、リストの要素数が一致していなくても問題ないが、それをそのままnumpy.array()の引数に渡すと、要素数がバラバラのリスト型オブジェクトを要素としたndarrayが生成される。 足りない部分を補完したりしないので注意。

l_2d_error = [[0, 1, 2], [3, 4]]

arr_2d_error = np.array(l_2d_error)

print(arr_2d_error)
# [list([0, 1, 2]) list([3, 4])]

print(arr_2d_error.dtype)
# object

print(arr_2d_error.shape)
# (2,)

NumPy配列ndarrayをリストに変換: tolist()

NumPy配列ndarrayのメソッドtolist()は、リスト型のオブジェクトを返す。 元のndarrayの次元数に応じて、ネストしたリストが取得できます。各要素にはインデックス[n]を繰り返すことでアクセスできます。 1次元の場合。

arr_1d = np.arange(3)

print(arr_1d)
# [0 1 2]

l_1d = arr_1d.tolist()

print(l_1d)
# [0, 1, 2]

2次元の場合。

arr_2d = np.arange(6).reshape((2, 3))

print(arr_2d)
# [[0 1 2]
#  [3 4 5]]

l_2d = arr_2d.tolist()

print(l_2d)
# [[0, 1, 2], [3, 4, 5]]

3次元の場合。

arr_3d = np.arange(24).reshape((2, 3, 4))

print(arr_3d)
# [[[ 0  1  2  3]
#   [ 4  5  6  7]
#   [ 8  9 10 11]]
#  [[12 13 14 15]
#   [16 17 18 19]
#   [20 21 22 23]]]

l_3d = arr_3d.tolist()

print(l_3d)
# [[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]], [[12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]]]

print(l_3d[0])
# [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]

print(l_3d[0][0])
# [0, 1, 2, 3]

print(l_3d[0][0][0])
# 0

シェア

関連カテゴリー

Python NumPy リスト

Pythonで正規化・標準化(リスト、NumPy配列、pandas.DataFrame) Pythonのリストと配列とnumpy.ndarrayの違いと使い分け Python, OpenCV, NumPyで画像のアルファブレンドとマスク処理 Pythonリスト内包表記の使い方 Pythonでリスト(配列)の要素を削除するclear, pop, remove, del NumPyで欠損値np.nanを含む配列ndarrayの合計や平均を算出 Python, NumPy(OpenCV)で画像を二値化処理 NumPyのeyeまたはidentityでone-hot表現に変換 NumPy配列ndarrayをprint表示で省略するかしないか設定 pandas参考書『Pythonによるデータ分析入門』の注意点 Pythonでリストの最大値・最小値から順にn個の要素を取得 pandas参考書『Python for Data Analysis, 2nd Edition』 NumPyで任意の行・列を削除するdeleteの使い方 NumPy配列ndarrayをタイル状に繰り返し並べるnp.tile Python, NumPyで画像処理(読み込み、演算、保存)

Last Updated: 6/26/2019, 10:34:03 PM