numpy.roll()
numpy.roll() は指定した軸に沿って配列の要素を シフト させます。
numpy.roll(a, shift, axis=None)
shift に正数 (プラスの値) を指定すると、すべての要素の位置が一斉にインデックスが増加する方向 (forward) へシフトします。たとえば、2 次元配列を渡して shift=1, axis=None を指定した場合、各要素は下図のようにずれます。
shift が負数 (マイナスの値) のときは逆方向にシフトします。
numpy.roll() を使って、1 次元配列の各要素を正方向 (右) にずらしてみます。
# NUMPY_ROLL_1D
# In[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 つシフトします。
# In[2]
# xの各要素の位置を負方向に1つシフト
rx2 = np.roll(x, -1)
print(rx2)
# [2 3 4 5 6 7 8 9 1]
次は numpy.roll() に 2 次元配列を渡してみます。
# NUMPY_ROLL_2D
# In[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 を渡すと、各要素の位置が行方向にシフトします。
# In[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 を渡すと、各要素の位置が列方向にシフトします。
# In[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]]
コメント