python中矩阵循环移位的简单方法(切片)

def circshift(matrix,shiftnum1,shiftnum2):
    h,w=matrix.shape
    matrix=np.vstack((matrix[(h-shiftnum1):,:],matrix[:(h-shiftnum1),:]))
    matrix=np.hstack((matrix[:,(w-shiftnum2):],matrix[:,:(w-shiftnum2)]))
    return matrix

上述代码中的matrix代表的是要处理的矩阵,shiftnum1代表要向下移动的行数,shiftnum2代表要向左移动的列数。
中心思想
通过切片的方式,先将矩阵分成两部分,分割的位置是你设置移动数量。然后将分割成的两部分,堆叠在一切,就形成了新的移动的函数。
注意:hstack是水平分割,用在列数的移动;vstack是垂直分割,用于行数的移动。

a=np.arange(1,17).reshape(4,4)
b=circshift(a,2,2)
print(a)
print(b)

上述例子将矩阵下移2行,左移2列。结果如下:

原矩阵:
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]
 [13 14 15 16]]
循环移位后的矩阵:
[[11 12  9 10]
 [15 16 13 14]
 [ 3  4  1  2]
 [ 7  8  5  6]]

因为正好项目里要求矩阵的循环移位,而python里面没有现成的函数,所以顺手做出了这个函数。很简单,可以直接使用。

文章转载于https://blog.csdn.net/cxkyxx/article/details/108105297

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值