基于python的Z字型扫描

此为Z字型扫描的基本示例python代码

        Z字型扫描共有 4 种行动方式:向右、向左下、向下、向右上,循环往复直至对一个二维矩阵扫描完毕。

        为实现此 4 种功能,为此配置不同的函数进行执行。

            trun函数:若触及四边的边界,进行扫描方向的转变

            move_left_down()函数:一直向左下扫描,直至抵达左边界或底部

            move_right_up()函数:一直向右上扫描,直至抵达右边界或顶部

完整代码如次下:

import numpy as np
def turn(row, column, rows,cols):

    if row == rows - 1:   # 已到达底部,此时需向右移动 (即,行数row不变,列数col右移)
        column += 1
    elif column == cols - 1:  # 已到达右边界,此时需向下移动 (即,行数row下移,列数col不变)
        row += 1
    elif row == 0:    # 已到达顶部(须放在‘已到达右边界’之后) (即,行数row不变,列数col右移)
        column += 1
    elif column == 0:  # 已到达左边界(须放在‘已到达底部’之后) (即,行数row下移,列数col不变)
        row += 1
    return (row, column)

def move_left_down(row, column, rows,cols):

    if column == 0 or row == rows - 1:  # 此时已到左边边界或底部
        row, column = turn(row, column, rows,cols)
        return (row, column, 1)  # 返回下一步开始的坐标,改变下一次扫描方向,向右上
    else:  # 向左下角移动
        row += 1
        column -= 1
        return (row, column, 0)  # 返回下一步开始的坐标,不改变扫描方向

def move_right_up(row, column, rows,cols):

    if row == 0 or column == cols - 1:  # 此时已到右边边界或顶部
        row, column = turn(row, column, rows,cols)
        return (row, column, 0)  # 返回下一步开始的坐标,改变扫描方向,向左下
    else:  # 向右上角移动
        row -= 1
        column += 1
        return (row, column, 1)  # 返回下一步开始的坐标,不改变扫描方向

def Z(matrix):
    rows, cols = matrix.shape[:2]
    print(f"输入Z扫描的矩阵:\n高度为 {rows},宽度为 {cols}")
    z = []
    z.append(matrix[0][0])
    # 打印左上角元素
    row = 0
    column = 1
    move_index = 0  # 0: left_down, 1: right_up。
    # 依次打印扫描到的元素
    while row < rows and column < cols:
        z.append(matrix[row][column])
        if move_index == 0:  # 0与1交替,决定了扫描移动的方向
            row, column, move_index = move_left_down(row, column, rows, cols)
        else:
            row, column, move_index = move_right_up(row, column, rows, cols)

    return z

if __name__ == '__main__':
    dct=[[1,2,3],[4,5,6],[7,8,9]]
    matrix = np.array(dct)
    print("matrix:\n",matrix)
    print("matrix的类型:",type(matrix))

    z=Z(matrix)
    print("z字型扫描后为:", z)
    print("z的类型:",type(z))

运行结果如下:

     若需要在pycharm的其它py文件中使用该Z字型扫描功能,仅需导入“你为该Z字型扫描设置的py”文件名 (如,Z.py,该Z.py里有以上代码),随后在你需要Z字型扫描的py内,加入

import Z
z=Z.Z("你要输入的二维数组")

第一个Z是包含上述代码的.py文件,第二个Z是Z.py文件内的Z函数。(第一个Z仅仅是你自己的命名的包含Z字型扫描的py文件名)

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值