『Python数値計算ノート』ではアフィリエイトプログラムを利用して商品を紹介しています。

PythonとKerasによるディープラーニング

新品価格
¥4,190から
(2019/8/21 23:37時点)

numpy.roll

numpy.roll()

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

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

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

 

コメント