Python中使用Numpy对矩阵指定行/列进行移位操作的方法是什么?
Numpy实现矩阵指定行/列移位操作
直接用Numpy内置的np.roll()函数即可实现循环移位效果,以下是针对你需求的实现方案:
前置准备
首先导入Numpy并构造示例矩阵:
import numpy as np # 示例矩阵 mat = np.array([[1, 2], [3, 4]]) print("原始矩阵:\n", mat)
1. 实现指定行移位
你需求中是对第2行(索引为1)执行右移1位的操作,代码如下:
# 指定要移位的行索引、移位步数 row_idx = 1 shift_step = 1 # 对指定行执行循环右移,赋值回原矩阵 mat[row_idx] = np.roll(mat[row_idx], shift=shift_step) print("行移位后矩阵:\n", mat)
输出结果和你要求的一致:
[[1 2] [4 3]]
2. 实现指定列移位
你需求中是对第2列(索引为1)执行下移1位的操作,代码如下:
# 先重置回原始矩阵 mat = np.array([[1, 2], [3, 4]]) # 指定要移位的列索引、移位步数 col_idx = 1 shift_step = 1 # 对指定列执行循环下移,赋值回原矩阵 mat[:, col_idx] = np.roll(mat[:, col_idx], shift=shift_step) print("列移位后矩阵:\n", mat)
输出结果和你要求的一致:
[[1 4] [3 2]]
通用封装函数
你可以直接用下面的封装函数,灵活调整移位方向、操作维度、移位步数:
def matrix_shift(mat, axis, idx, shift_step): """ 参数说明: mat: 输入的Numpy矩阵 axis: 操作维度,0=行操作,1=列操作 idx: 要操作的行/列索引 shift_step: 移位步数,正数为右/下移,负数为左/上移 """ new_mat = mat.copy() if axis == 0: new_mat[idx] = np.roll(new_mat[idx], shift_step) elif axis == 1: new_mat[:, idx] = np.roll(new_mat[:, idx], shift_step) return new_mat # 测试行移位 mat = np.array([[1,2],[3,4]]) print(matrix_shift(mat, axis=0, idx=1, shift_step=1)) # 测试列移位 print(matrix_shift(mat, axis=1, idx=1, shift_step=1))
内容的提问来源于stack exchange,提问作者Hamin Lim
相关产品推荐
相关产品推荐

