鱼C论坛

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

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

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

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

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

x
各位鱼油大家晚上好

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

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


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

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

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

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


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

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

  23. record = []  #存储数据

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

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

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

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

  38. #最后一行元素 判断是否退出程序
  39.     left += 1
  40.     right -= 1
  41.    
  42.     top += 1
  43.     low -= 1

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

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

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-1-7 08:20:43 | 显示全部楼层
我觉得挺好的了。没看到啥多余的地方
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-7 10:53:21 From FishC Mobile | 显示全部楼层
我觉得很好,我的思路也一样,边界一直往内缩小就是题解
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-7 12:10:38 | 显示全部楼层
b=[[row[i] for row in matrix] for i in range(-1,-5,-1)]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

https://blog.csdn ...

原来如此,但是等等.......这个链接的内容也太硬了吧,暂时啃不动
不过还是涨知识了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

好的,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 16:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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