numpy.roll()

numpy.roll()

numpy.roll()

 numpy.roll() は指定した軸に沿って配列の要素を シフト させます。

 numpy.roll(a, shift, axis=None)

 a:配列に相当するオブジェクト
 shift:整数または整数のタプル
 axis:整数

 shift に正数 (プラスの値) を指定すると、すべての要素の位置が一斉にインデックスが増加する方向 (forward) へシフトします。たとえば、2 次元配列を渡して shift=1, axis=None を指定した場合、各要素は下図のようにずれます。

 numpy roll (要素のロールシフト)

 shift が負数 (マイナスの値) のときは逆方向にシフトします。

numpy.roll(1D array)

 numpy.roll() を使って、1 次元配列の各要素を正方向 (右) にずらしてみます。

# ROL_01-1

import numpy as np

# x=[1 2 3 4 5 6 7 8 9]
x = np.arange(1, 10)

# xの各要素の位置を正方向に2つシフト
rx1 = np.roll(x, 2)

print(rx1)
[8 9 1 2 3 4 5 6 7]

 shift=-1 を指定すると、左側に 1 つシフトします。

# ROL_01-2

# xの各要素の位置を負方向に1つシフト
rx2 = np.roll(x, -1)

print(rx2)
[2 3 4 5 6 7 8 9 1]

 

NumPy&SciPy数値計算実装ハンドブック (Pythonライブラリ定番セレクション)

新品価格
¥3,300から
(2019/10/24 17:07時点)

numpy.roll(2D array)

 numpy.roll() に 2 次元配列を渡します。

# ROL_02-1

import numpy as np

# [[1 2 3]
#  [4 5 6]
#  [7 8 9]]
y = np.arange(1, 10).reshape(3, 3)

# yの各要素の位置を正方向に1つシフト
rx3 = np.roll(y, 1)

print(rx3)
[[9 1 2]
 [3 4 5]
 [6 7 8]]

 axis=0 を渡すと、各要素の位置が行方向にシフトします。

# ROL_02-2

# 配列y
# [[1 2 3]
#  [4 5 6]
#  [7 8 9]]

# yの各要素の位置を行方向に1つシフト
rx4 = np.roll(y, 1, axis=0)

print(rx4)
[[7 8 9]
 [1 2 3]
 [4 5 6]]

 axis=1 を渡すと、各要素の位置が列方向にシフトします。

# ROL_02-3

# 配列y
# [[1 2 3]
#  [4 5 6]
#  [7 8 9]]

# yの各要素の位置を列方向に1つシフト
rx5 = np.roll(y, 1, axis=1)

print(rx5)
[[3 1 2]
 [6 4 5]
 [9 7 8]]