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]]
コメント