鱼C论坛

 找回密码
 立即注册
查看: 1241|回复: 6

[已解决]py课后作业25,顺时针旋转矩阵中的所有元素

[复制链接]
发表于 2022-1-6 22:35:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
各位鱼油大家晚上好

        做了一下25课的顺时针旋转矩阵中所有元素,然后想转换一下搞个按照逆时针旋转,然而转来转去被搞懵逼了
        不过还做出来了嘻嘻。

请各位帮忙看一下做对没有?思路是否正确?有没有简且好的方案?
顺便也做一下笔记

matrix = [[1,2,3,4],
          [5,6,7,8],
          [9,10,11,12]]

##########  解析  ##########
#初始化矩阵的四个方向:顶部(top), 底部(low):表示行的长度 , 左边(left) , 右边(right):表示列的长度
#因为是逆时针旋转所以:[1,5,9]-->[10,11,12]-->[8,4]-->[3,2]-->[6]-->[7]
#有共同面就只需重复执行那一行即可

#<1>,从上到下遍历:(top,low+1) ----> (low,left)
#<2>,从左到右遍历:(left+1,low) ---> (low,right+1) **********
#<3>,从下到上遍历:(low-1,right) ---> (top-1,right) *********
#<4>,从有到左遍历:(top,right-1) ---> (left,top)

#经过一轮的遍历,那么相当于走了外层一圈,也就是 left+1、right-1、top+1、low-1
###每前进一层 left 就加 1,right 就减 1,top 和 low 也是一样,那么无论这个二维列表有多大,都会遇到一个矛盾点,那就是 left 终究会大于 right,top 终究会大于 low这个就是结束的条件啦!


#与矩阵数据关联
#获取矩阵 行 的长度赋值给x
#获取矩阵 列 的长度赋值给y
x = len(matrix)
y = len(matrix[0])

left = 0  #左面
right = y - 1  #右面  , 表示列
top = 0   #顶部
low = x - 1   #底部  , 表示行

record = []  #存储数据

while left <= right and top <= low:
    #从下到上遍历
    for col in range(top,low+1):
        record.append(matrix[col][left])

    #从左到右遍历
    for row in range(left+1,right+1): 
        record.append(matrix[low][row])

    if left < right and top < low:
        #从下到上遍历
        for col in range(low-1 ,top-1,-1):
            record.append(matrix[col][right])

        #从右到左遍历
        for row in range(right-1,left,-1):
            record.append(matrix[top][row])

#最后一行元素 判断是否退出程序
    left += 1
    right -= 1
    
    top += 1
    low -= 1

print(record)
最佳答案
2022-1-7 11:14:42
对于n维矩阵的平移缩放和旋转只需要升维到n+1维 运算量能略微减小而且更适合显卡运算

https://blog.csdn.net/qq_23030843/article/details/81064881

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-7 08:20:43 | 显示全部楼层
我觉得挺好的了。没看到啥多余的地方
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-7 10:53:21 From FishC Mobile | 显示全部楼层
我觉得很好,我的思路也一样,边界一直往内缩小就是题解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-7 11:14:42 | 显示全部楼层    本楼为最佳答案   
对于n维矩阵的平移缩放和旋转只需要升维到n+1维 运算量能略微减小而且更适合显卡运算

https://blog.csdn.net/qq_23030843/article/details/81064881

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-7 12:10:38 | 显示全部楼层
b=[[row[i] for row in matrix] for i in range(-1,-5,-1)]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-7 16:07:46 | 显示全部楼层
kogawananari 发表于 2022-1-7 11:14
对于n维矩阵的平移缩放和旋转只需要升维到n+1维 运算量能略微减小而且更适合显卡运算

https://blog.csdn ...

原来如此,但是等等.......这个链接的内容也太硬了吧,暂时啃不动
不过还是涨知识了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-7 16:09:02 | 显示全部楼层
傻眼貓咪 发表于 2022-1-7 10:53
我觉得很好,我的思路也一样,边界一直往内缩小就是题解

好的,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 13:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表