Python NumPy 多次元配列のスライシング #1

株式会社リュディアです。NumPy ndarray 多次元配列のスライシングについてまとめていきたいと思います。

2次元の NumPy ndarray のイメージから見ていきます。以下のコードを見てください。

import numpy as np

np_2d = np.arange(20).reshape(4,5)
print(np_2d)

#
# [[ 0  1  2  3  4]
#  [ 5  6  7  8  9]
#  [10 11 12 13 14]
#  [15 16 17 18 19]]
#

0 ~ 19 までの 20個の要素を 4行 x 5列 の2次元配列として表現しています。図のイメージも以下につけておきます。

画像1

では最も基本的なスライシングである行単位での切り出しから見てみましょう。上の図のイメージを持てば容易に理解できると思います。

import numpy as np

np_2d = np.arange(20).reshape(4,5)

print(np_2d[0])
print(np_2d[2])
print(np_2d[0:2])

#
# [0 1 2 3 4]
#
# [10 11 12 13 14]
#
# [[0 1 2 3 4]
#  [5 6 7 8 9]]
#

問題ないですね。ではスライシングのまとめでも言及したステップについても考えてみます。Step は指定しない場合、つまりデフォルトでは +1 であることを思い出しながら以下のコードを見てください。

import numpy as np

np_2d = np.arange(20).reshape(4,5)

print(np_2d[0:2])
print(np_2d[0:2:1])

#
# [[0 1 2 3 4]
#  [5 6 7 8 9]]
#
# [[0 1 2 3 4]
#  [5 6 7 8 9]]
#

最後の 1 があるかどうかで結果が変わらないことはわかりますね。では前にまとめた内容の確認になりますが、start, stop, step の関係について再度確認してみます。

import numpy as np

np_2d = np.arange(20).reshape(4,5)

print(np_2d[0:2:-1])
print(np_2d[2:0:-1])

#
# []
#
# [[10 11 12 13 14]
#  [ 5  6  7  8  9]]
#

Step で負の数 -1 を指定した場合には [ 0 : 2 : -1 ] の指定は無効です。なぜ無効になるかは依然にまとめた以下の記事を見てください。

今回は NumPy 多次元配列のスライシングについて最も基礎になる部分をまとめました。

Python NumPy 多次元配列のスライシング に関するまとめの続きは以下からどうぞ。

では、ごきげんよう。


この記事が気に入ったらサポートをしてみませんか?