我的第一篇优快云博客文章,Python代码实现矩阵翻转

本文分享了一名园艺专业大学生自学编程的心得,特别介绍了使用Python实现矩阵翻转的过程,包括输入矩阵元素、进行行列变换以及异常处理等关键步骤。文章详细阐述了解决过程中遇到的问题,并提供了完整的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python代码实现矩阵翻转

(^__^)不知道这个标题该取个什么名字好

嗯,有点儿词穷啊,不知道怎么表达。这一篇文章,是我在优快云的第一篇博客。最近自己一直在自学编程,希望通过写博客的方式来记录自己的学习历程。我自己是一名园艺专业的大学生,对自己本专业不太感兴趣,但限于能力所限,不能转专业到自己喜爱的计算机类专业,所以为了满足自己的兴趣,就选择了自学这条路子。嗯,当然啦,我也不愿意去丢下我所在的专业,未来想往农业现代化方面发展!
嗯,第一次用markdown写博客啊!以后都这么干了,好了,进入主题吧!

Python代码实现矩阵翻转

之前在计蒜客的挑战难题上看到这么一道题目
计蒜客上一道挑战难题
感觉难度不大,于是我就选择试一下,使用自己最近学的Python语言。通了两晚的宵,总算把实现思路搞清楚,最后完成了代码的实现,不赘述太多了,开始吧

实现的几个步骤

-读入行列和转动方向
-创建对应行列的二维数组(矩阵)
-输入矩阵各元素
-进行行列变换
-打印输出矩阵

读入行列和转动方向

根据题目的要求,我们需要分别读入行数、列数和翻转方向(0代表上下,1代表左右),每个数之间使用空格分隔,例如“1 2 1”代表对一个1行2列的矩阵进行左右翻转。根据要求,需要创建三个变量来分别存储行、列、方向。为了从字符串提取出三个数字,这里我选择使用字符串的split()方法,方法返回一个含有三个字符类型的数字的列表,最后通过int()进行类型转换分别交由三个变量管理,具体实现代码如下:

#读入行列和转动方向

linStr = input("")
linNum = linStr.split(" ")
lines = int(linNum[0])
lists = int(linNum[1])
diration = int(linNum[2])
创建对应行列的二维数组(矩阵)

根据题目要求,我们需要创建一个二维数组,from my perspective,严格来说,python不存在二维数组,所以我们需要换一种方式来代表二维数组,这就是列表里面再放进列表,通过上述方法,来实现输出一个二维数组,实现代码如下:

#创建对应行列的二维数组(矩阵)
mateix = [[0 for i in range(lists)]for i in range(lines)]
输入矩阵各元素

在这段功能的实现上纠结了我许久,其中一个纠结的地方就是存入字符串型的数字,还是整数类型的数字呢,最后为了代码的简洁,我决定存入字符串型。
题目要求输入一个看起来像矩阵的xx(词穷请原谅)
存入思路如下:
通过lines行的读取,分别读入第i行的数据,所以先来一个for循环,在循环体内部,读取第i行的内容,然后使用split()方法分离数据,然后在使用一个for循环一个一个的存入!实现代码如下:

#输入矩阵各元素
for i in range(lines):
    linStr = input("")
    linNum = linStr.split(" ")
    for k in range(lists):
        mateix[i][k] = linNum[k]
进行行列变换

现在来到了程序最核心的部分了,完成了相关的输入之后,就要开始进行转换。
首先考虑上下翻转。根据每行相互交换的关系进行调换。列变换同理,实现代码如下:

#   进行行列变换
if diration == 0: #行变换
    for i in range(int(lines/2)):
        mateix[lines-i-1],mateix[i] = mateix[i],mateix[lines-i-1]
elif diration == 1: #列变换
    for i in range(lines):
        for j in range(int(lists/2)):
            mateix[i][lists-j-1],mateix[i][j] = mateix[i][j],mateix[i][lists-j-1]
else:
    print("error")
打印输出矩阵

最后打印输出矩阵,使用两个for each对二维数组进行遍历,实现代码如下:

#打印输出矩阵
for i in mateix:
    for j in i:
        print(j,end=" ")
    print()

测试

这样一来,代码就全部完成,下面开始测试下代码
这里写图片描述 这里写图片描述

全部代码展示

# 这是一个对矩阵进行翻转的程序

#读入行列和转动方向

linStr = input("")
linNum = linStr.split(" ")
lines = int(linNum[0])
lists = int(linNum[1])
diration = int(linNum[2])

#创建对应行列的二维数组(矩阵)
mateix = [[0 for i in range(lists)]for i in range(lines)]

#输入矩阵各元素
for i in range(lines):
    linStr = input("")
    linNum = linStr.split(" ")
    for k in range(lists):
        mateix[i][k] = linNum[k]

#   进行行列变换
if diration == 0: #行变换
    for i in range(int(lines/2)):
        mateix[lines-i-1],mateix[i] = mateix[i],mateix[lines-i-1]
elif diration == 1: #列变换
    for i in range(lines):
        for j in range(int(lists/2)):
            mateix[i][lists-j-1],mateix[i][j] = mateix[i][j],mateix[i][lists-j-1]
else:
    print("error")

#打印输出矩阵
for i in mateix:
    for j in i:
        print(j,end=" ")
    print()

存在的一些问题

1、没有异常处理,输入的行列数目不对应会报错

END

在图像处理中,仿射变换是一种非常重要的技术,它允许我们在保持图像中直线平行性的同时,实现图像的倾斜、旋转、拉伸和剪切等操作。OpenCV库提供了功能强大的函数来执行这些操作,结合Python,可以让我们轻松地对图像进行复杂的变换。 参考资源链接:[OpenCV图像几何变换全解析:平移、缩放、旋转与仿射透视](https://wenku.csdn.net/doc/4kpcpsncdv?spm=1055.2569.3001.10343) 要实现图像的仿射变换,首先需要构建一个2x3的仿射变换矩阵。这个矩阵可以由`cv2.getRotationMatrix2D`函数生成,该函数需要我们指定旋转的中心点、旋转角度和缩放因子。接下来,使用`cv2.warpAffine`函数,将仿射变换矩阵应用到原始图像上。 下面是一个Python示例代码,展示了如何使用OpenCV将图像旋转10度并进行水平镜像: ```python import cv2 import numpy as np # 读取图像 image = cv2.imread('image.jpg') # 获取图像尺寸 (h, w) = image.shape[:2] # 计算图像旋转的中心点 center = (w // 2, h // 2) # 创建旋转矩阵,旋转角度为10度,缩放因子为1(不缩放) M = cv2.getRotationMatrix2D(center, 10, 1.0) # 执行仿射变换,得到旋转后的图像 rotated_image = cv2.warpAffine(image, M, (w, h)) # 水平镜像变换矩阵,x轴翻转 horizontal_flip = cv2.flip(rotated_image, 1) # 显示结果 cv2.imshow('Original Image', image) cv2.imshow('Rotated and Mirrored Image', horizontal_flip) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在这个示例中,我们首先读取了图像,并计算了旋转的中心点。然后,我们创建了一个旋转矩阵,指定旋转角度为10度,并应用这个矩阵到图像上进行旋转。最后,我们使用`cv2.flip`函数并传入参数1,实现了水平镜像变换。最终,我们展示了旋转并镜像后的图像。 通过这个示例,你不仅学会了如何使用OpenCV进行图像的仿射变换,还掌握了如何将旋转和镜像结合应用到图像处理中。如果你希望进一步深入学习图像处理的相关知识,建议查阅《OpenCV图像几何变换全解析:平移、缩放、旋转与仿射透视》。这本书详细介绍了OpenCV中的几何变换,并且提供了丰富的实际案例和代码示例,可以帮助你更好地理解和应用这些技术。 参考资源链接:[OpenCV图像几何变换全解析:平移、缩放、旋转与仿射透视](https://wenku.csdn.net/doc/4kpcpsncdv?spm=1055.2569.3001.10343)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值