この記事では、NumPyについて学習する中で、私が個人的にややこしいと感じた点を紹介します。Pythonを初めて学ぶ方にとって、参考になれば幸いです。結論から言うと、NumPy配列をPythonの標準リストに変換するときは、list()
ではなくtolist()
を使うことをおすすめします。具体的なコードを以下で紹介します。
リストをNumPy配列へ変換
まず、Pythonの標準リストlist
からNumPy配列ndarray
への変換は、numpy.array()
を使います。
numpy.array — NumPy v2.2 Manual
import numpy as np
list_1d = [1, 2, 3]
print(list_1d)
# [1, 2, 3]
array_1d = np.array(list_1d)
print(array_1d)
# [1 2 3]
2次元以上の場合でも同様の方法で変換できます。
list_2d = [[1, 2, 3], [4, 5, 6]]
print(list_2d)
# [[1, 2, 3], [4, 5, 6]]
array_2d = np.array(list_2d)
print(array_2d)
# [[1 2 3]
# [4 5 6]]
NumPy配列をリストへ変換
次に、NumPy配列ndarray
からlist
への変換はndarray.tolist()
を使います。
numpy.ndarray.tolist — NumPy v2.2 Manual
array_1d = np.array([9, 8, 7])
print(array_1d)
# [9 8 7]
list_1d = array_1d .tolist()
print(list_1d)
# [9, 8, 7]
先ほどと同じく、2次元以上の場合でも同様の方法で変換できます。
array_2d = np.array([[9, 8, 7], [6, 5, 4]])
print(array_2d)
# [[9 8 7]
# [6 5 4]]
list_2d = array_2d .tolist()
print(list_2d)
# [[9, 8, 7], [6, 5, 4]]
tolist()ではなくlist()を使用した場合
では、NumPy配列ndarray
からlist
への変換をndarray.tolist()
ではなく、Pythonの組み込み関数であるlist()
で行うとどうなるでしょうか。
組み込み関数 — Python 3.13.3 ドキュメント
array_1d = np.array([9, 8, 7])
print(array_1d)
# [9 8 7]
list_1d = list(array_1d)
print(list_1d)
# [9, 8, 7]
上記のように、1次元配列では問題なく変換できます。しかし、2次元配列の場合、以下の例に示すように、期待どおりの挙動にならないため注意が必要です。
array_2d = np.array([[9, 8, 7], [6, 5, 4]])
print(array_2d)
# [[9 8 7]
# [6 5 4]]
list_2d = list(array_2d)
print(list_2d)
# [array([9, 8, 7]), array([6, 5, 4])] # ndarrayの2次元目がlistに変換されていない
まとめ
ndarray.tolist()
:ndarray
を再帰的にlist
に変換するlist(ndarray)
:ndarray
の1次元目のみをlist
に変換する
この違いがあるため、NumPy配列をリストに変換する際には、ndarray.tolist()
を使用することが推奨されています。