numpy.roll
官方链接
对于1维数组:
实现向左和向右的循环位移
示例:
import numpy as np
mat= np.array([1,2,3,4,5,6])
print(np.roll(mat,-1))
print(np.roll(mat,1))
正数是向index大的方向循环位移,负数是向index小的方向循环位移:
[2 3 4 5 6 1]
[6 1 2 3 4 5]
对于矩阵:
不指定axis
,则相当于先把数组扁平化,然后进行循环位移,最后再reshape到原来的形状
示例:
import numpy as np
mat= np.array([[1,2,3,4],[5,6,7,8]])
print(np.roll(mat,-1))
结果:
[[2 3 4 5]
[6 7 8 1]]
如果要提对每一列进行循环位移,则相当于矩阵被切片成mat[:,0],mat[:,1],mat[:,2],并对三个列向量进行循环位移,也可以看成是在axis=0方向循环位移,则可以指定axis=0
示例:
import numpy as np
mat= np.array([[1,2,3,4],[5,6,7,8]])
print(np.roll(mat,1,axis=0))
结果:
[[5 6 7 8]
[1 2 3 4]]
同理,如果要对每一行进行循环位移,则可以指定axis=1
示例:
import numpy as np
mat= np.array([[1,2,3,4],[5,6,7,8]])
print(np.roll(mat,1,axis=1))
结果:
[[4 1 2 3]
[8 5 6 7]]