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

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

前回までの NumPy ndarray 多次元配列のスライシング のまとめへのリンクは以下を参考にしてください。

今回は2次元配列のステップを指定したスライシングについてまとめます。まず以下の絵を見てください。

画像1

2次元配列の行のスライシングですが偶数行のみ、奇数行のみをスライシングすることを考えます。行番号は0 から始まり 0 も偶数であることに注意してください。以下のように考えてみましょう。偶数行のみをスライシングしたい場合はすべての要素を2行毎にスライシングする、奇数行のみをスライシングしたい場合は先頭行を 1 として2行毎にスライシングをします。以下のコードを見てください。

import numpy as np

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

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

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

[::2] は開始行、終了行を指定せずステップのみ +2 を指定しています。つまりすべての行のうち偶数行に相当する部分のみをスライシングしています。次の [1::2] は開始行を 1 と指定し、ステップを + 2 と指定しているので奇数行に相当する部分のみをスライシングすることになります。

次は同様に偶数列、奇数列のみをスライシングしてみます。以下の図を見てください。

画像2

以下のコードを見てください。NumPy であれば列のスライシングも容易です。

import numpy as np

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

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

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

もうわかりますね。では最後に行と列の両方のステップを指定してみます。以下のコードを見てください。

import numpy as np

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

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

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

コードを見て実行結果をイメージできましたか?今回はステップを指定したスライシングをまとめました。

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

では、ごきげんよう。


いいなと思ったら応援しよう!