circshift是Matlab中矩阵循环移位函数,具体使用参照该链接。
但是python中并没有封装好的该函数,因此需要自己实现。
思路:将矩阵分为两部分,然后按照自己的需要堆叠在一起就可以了。
np.vstack用在行的分割;
np.hstack用在列的分割。
## u代表原矩阵,shiftnum1代表行,shiftnum2代表列。
def circshift(u,shiftnum1,shiftnum2):
h,w = u.shape
if shiftnum1 < 0:
u = np.vstack((u[-shiftnum1:,:],u[:-shiftnum1,:]))
else:
u = np.vstack((u[(h-shiftnum1):,:],u[:(h-shiftnum1),:]))
if shiftnum2 > 0:
u = np.hstack((u[:, (w - shiftnum2):], u[:, :(w - shiftnum2)]))
else:
u = np.hstack((u[:,-shiftnum2:],u[:,:-shiftnum2]))
return u
若 shiftnum1大于0,则代表从上往下移动,否则就是从下往上移动;
若 shiftnum2大于0,则代表从左往右移动,否则就是从右往左移动;
示例1:
a = np.matrix([[1,2,3],[4,5,6],[7,8,9]])
b = circshift(a,-1,0)
print(b)
输出:
[[4 5 6]
[7 8 9]
[1 2 3]]
示例2:
a = np.matrix([[1,2,3],[4,5,6],[7,8,9]])
b = circshift(a,1,0)
print(b)
输出:
[[7 8 9]
[1 2 3]
[4 5 6]]
示例3:
a = np.matrix([[1,2,3],[4,5,6],[7,8,9]])
b = circshift(a,0,1)
print(b)
输出:
[[3 1 2]
[6 4 5]
[9 7 8]]
示例4:
a = np.matrix([[1,2,3],[4,5,6],[7,8,9]])
b = circshift(a,0,-1)
print(b)
输出:
[[2 3 1]
[5 6 4]
[8 9 7]]
努力加油a啊