You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中同时沿x、y两个方向(对角方向)平移2D方阵?

2D方阵对角平移Python实现方案

效果参考示意图:
2D方阵对角平移示意图

对角平移本质是同时对矩阵的行(y方向)和列(x方向)做指定步长的循环移位,Python中可以通过两种常见方式实现:


方案1:使用numpy实现(性能最优,推荐)

直接调用numpy内置的roll函数即可完成,提前安装依赖:
pip install numpy

实现代码:

import numpy as np

def diagonal_shift(matrix, dx: int, dy: int):
    """
    2D方阵对角平移
    :param matrix: 输入2D numpy方阵
    :param dx: x方向平移步长,正数右移,负数左移
    :param dy: y方向平移步长,正数下移,负数上移
    :return: 平移后方阵
    """
    # 沿x方向(列维度,轴1)移位
    res = np.roll(matrix, shift=dx, axis=1)
    # 沿y方向(行维度,轴0)移位
    res = np.roll(res, shift=dy, axis=0)
    return res

# 测试示例
if __name__ == "__main__":
    test_mat = np.arange(16).reshape(4,4)
    print("原始矩阵:\n", test_mat)
    # 右下方向各平移1步
    shifted = diagonal_shift(test_mat, dx=1, dy=1)
    print("\n平移后矩阵:\n", shifted)

方案2:纯Python列表实现(无第三方依赖)

如果不想引入numpy依赖,也可以基于列表切片实现:

def diagonal_shift_pure_python(matrix: list[list], dx: int, dy: int):
    n = len(matrix)
    # 处理步长取模,避免超过矩阵尺寸
    dx = dx % n
    dy = dy % n
    # 先完成列方向平移
    col_shifted = [row[-dx:] + row[:-dx] if dx != 0 else row.copy() for row in matrix]
    # 再完成行方向平移
    row_shifted = col_shifted[-dy:] + col_shifted[:-dy] if dy != 0 else col_shifted
    return row_shifted

两种实现均支持任意步长的对角平移,超出矩阵边界的元素会自动循环补到对侧,和示意图效果完全一致。

内容的提问来源于stack exchange,提问作者Skylimit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 01:06:03