Python np.roll まとめ

ある配列をシフトしたい、つまり、ある行列があった場合、n列目やm行目をx列目やy行目にずらしたいとき

Pythonでは、Numpyモジュールのrollでシフトすることができます。

1次元

1次元をシフトしたい場合、以下のように記述します。

import numpy as np

array = np.array([1,2,3,4,5,6,7,8,9])
print(array)
roll_array = np.roll(array,1)
print(roll_array)
[1 2 3 4 5 6 7 8 9]
[9 1 2 3 4 5 6 7 8]

要素が右にシフトしました。

左にシフトしたい場合、2つ目の引数を負にすればいいです。

import numpy as np

array = np.array([1,2,3,4,5,6,7,8,9])
print(array)
roll_array = np.roll(array,-1)
print(roll_array)
[1 2 3 4 5 6 7 8 9]
[2 3 4 5 6 7 8 9 1]

Numpyモジュールを用いるため、最初にimportしてあげましょう。

2次元

2次元配列の場合、要素をずらす場合と行、列自身を軸としてずらす2つのパターンがあります。

要素をずらす場合は、以下のように記述します。

import numpy as np

array = np.array([1,2,3,4,5,6,7,8,9]).reshape(3,3)
print(array)
roll_array = np.roll(array,1)
print(roll_array)
[[1 2 3]
 [4 5 6]
 [7 8 9]]

[[9 1 2]
 [3 4 5]
 [6 7 8]]

上にシフト

行、列を軸としてずらす場合、3つ目の引数(axis)に値を入れる必要があります。

import numpy as np

array = np.array([1,2,3,4,5,6,7,8,9]).reshape(3,3)
print(array)
roll_array = np.roll(array,-1,axis=0)
print(roll_array)
[[1 2 3]
 [4 5 6]
 [7 8 9]]

[[4 5 6]
 [7 8 9]
 [1 2 3]]

下にシフト

import numpy as np

array = np.array([1,2,3,4,5,6,7,8,9]).reshape(3,3)
print(array)
roll_array = np.roll(array,1,axis=0)
print(roll_array)
[[1 2 3]
 [4 5 6]
 [7 8 9]]

[[7 8 9]
 [1 2 3]
 [4 5 6]]

左にシフト

import numpy as np

array = np.array([1,2,3,4,5,6,7,8,9]).reshape(3,3)
print(array)
roll_array = np.roll(array,-1,axis=1)
print(roll_array)
[[1 2 3]
 [4 5 6]
 [7 8 9]]

[[2 3 1]
 [5 6 4]
 [8 9 7]]

右にシフト

import numpy as np

array = np.array([1,2,3,4,5,6,7,8,9]).reshape(3,3)
print(array)
roll_array = np.roll(array,1,axis=1)
print(roll_array)
[[1 2 3]
 [4 5 6]
 [7 8 9]]

[[3 1 2]
 [6 4 5]
 [9 7 8]]

3次元以上でも同様に動かすことができます。

まとめ

#1次元,2次元(要素)
num > 0 : 右にシフト
num < 0 : 左にシフト
np.roll(array,num)
#2次元(軸に沿って)
num > 0 && dim = 0 : 下にシフト
num < 0 && dim = 0 : 上にシフト
num > 0 && dim = 1 : 右にシフト
num < 0 && dim = 1 : 左にシフト
np.roll(array,num,axis=dim)