面试金典07(Python)—— 旋转矩阵(中等)

这篇具有很好参考价值的文章主要介绍了面试金典07(Python)—— 旋转矩阵(中等)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

旋转矩阵

概述:给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。不占用额外内存空间能否做到?

给定 matrix = 
[
  [1,2,3],
  [4,5,6],
  [7,8,9]
],
原地旋转输入矩阵,使其变为:
[
  [7,4,1],
  [8,5,2],
  [9,6,3]
]



给定 matrix =
[
  [ 5, 1, 9,11],
  [ 2, 4, 8,10],
  [13, 3, 6, 7],
  [15,14,12,16]
], 
原地旋转输入矩阵,使其变为:
[
  [15,13, 2, 5],
  [14, 3, 4, 1],
  [12, 6, 8, 9],
  [16, 7,10,11]
]

方法一:nm 矩阵

思路:定义一个 nm 的空矩阵,依次循环替代即可。最后需要注意把原矩阵替换成新矩阵。

# nm 矩阵
class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        n = len(matrix)
        m = len(matrix[0])
        matrix_new = [[0] * m for i in range(n)]
        for i in range(n):
            for j in range(m):
                matrix_new[j][-i - 1] = matrix[i][j]
        matrix[:] = matrix_new[:]

方法二:nn 方阵

思路:和上面思路一致,不同在于这里是方阵,即行数与列数相等。

# nn 方阵
class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        n = len(matrix)
        matrix_new = [[0] * n for i in range(n)]
        for i in range(n):
            for j in range(n):
                matrix_new[j][-i - 1] = matrix[i][j]
        matrix[:] = matrix_new[:]

方法三:原地旋转

思路:首先找到行旋转到列时,位置变化的规律。然后对半再对半切开,依次循环即可。

# 原地旋转
class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        n = len(matrix)
        for i in range(n // 2):
            for j in range((n + 1) // 2):
                matrix[i][j], matrix[n - j - 1][i], matrix[n - i - 1][n - j - 1], matrix[j][n - i - 1] = \
                matrix[n - j - 1][i], matrix[n - i - 1][n - j - 1], matrix[j][n - i - 1], matrix[i][j]

方法四:对半翻转

思路:该算法和原地旋转思想一致,不同于在先水平再对角即可。

# 对半翻转
class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        n = len(matrix)
        for i in range(n // 2):
            for j in range(n):
                matrix[i][j], matrix[n - i - 1][j] = matrix[n - i - 1][j], matrix[i][j]
        for i in range(n):
            for j in range(i):
                matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]

总结

还是方法三高级,所以我选择方法四。

文章来源地址https://www.toymoban.com/news/detail-595516.html

到了这里,关于面试金典07(Python)—— 旋转矩阵(中等)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【动手学深度学习】课程笔记 05-07 线性代数、矩阵计算和自动求导

    【动手学深度学习】课程笔记 05-07 线性代数、矩阵计算和自动求导

    向量相关 矩阵相关 简单来说,范数是用来衡量矩阵(张量)大小的值,范数的值有不同的规定。 仅记录一些我比较陌生的知识。 张量的克隆 张量的降维 首先定义一个张量x,指定其元素的数据类型为32位的float: 接着调用求和函数,因为会对张量中的一些维度进行求和,求

    2024年02月03日
    浏览(14)
  • 线性代数Python计算:矩阵对角化

    线性代数Python计算:矩阵对角化

    线性变换 T T T 的矩阵 A ∈ P n × n boldsymbol{A}in P^{ntimes n} A ∈ P n × n 的对角化,即寻求对角阵 Λ boldsymbol{Lambda} Λ ,使得 A boldsymbol{A} A ~ Λ boldsymbol{Lambda} Λ ,需分几步走: (1)解方程 det ⁡ ( λ I − A ) = 0 det(lambdaboldsymbol{I}-boldsymbol{A})=0 det ( λ I − A ) = 0 ,得根 λ 1 , λ

    2024年02月08日
    浏览(12)
  • Python处理矩阵和线性代数问题

    如未作说明,下列方法均调用自 linalg 矩阵分解 cholesky , qr ,奇异值分解 svd 求特征值 eigvals ,共轭对称阵特征值 eigvalsh(a[, UPLO]) 特征值和 特征向量 eig ,共轭对称的特征值和向量 eigh(a[, UPLO]) 特征数字 范数 norm ,迹 trace 条件数 cond ,行列式 det ,符号 slogdet 通过SVD方法求秩

    2024年02月05日
    浏览(12)
  • 转换矩阵、平移矩阵、旋转矩阵关系以及python实现旋转矩阵、四元数、欧拉角之间转换

    转换矩阵、平移矩阵、旋转矩阵关系以及python实现旋转矩阵、四元数、欧拉角之间转换

    由于在平时总是或多或少的遇到平移旋转的问题,每次都是现查资料,然后查了忘,忘了继续查,这次弄明白之后干脆写一篇文章,给人方便同时于己方便,后续如有扩充或变动也方便添加。 假设有两个向量 a 1 = ( x 1 , y 1 , z 1 ) a_1 = (x_1, y_1, z_1) a 1 ​ = ( x 1 ​ , y 1 ​ , z 1 ​

    2024年02月03日
    浏览(29)
  • 【Python】旋转矩阵与旋转向量的相互转换(OpenCV)

    因为任意旋转矩阵仅有 3 个自由度,因此旋转向量是旋转矩阵的一个方便和最紧凑的表示。在全局 3D 几何优化中常用到旋转矩阵和旋转向量的相互转换,例如相机标定、PnP 问题的求解等。本文介绍基于 OpenCV-Python 的互转换实现方法。 参数详解 : src :输入旋转向量(3x1 或

    2024年02月12日
    浏览(7)
  • C++/Python:罗德里格斯旋转矩阵

    C++/Python:罗德里格斯旋转矩阵

    背景:给定两个向量V1,V2,怎么求之间的转换矩阵? [羽量级公司发月饼了,比去年强,手提式的了dog] 通过V1和V2的叉积,可以知道旋转轴Vcross(垂直屏幕指向外侧或内侧的向量) 这里还可以将旋转轴向量单位化,方便后面使用 还可以知道两向量的夹角(这个夹角是沿着旋转

    2024年02月02日
    浏览(10)
  • 线性代数的学习和整理23:用EXCEL和python 计算向量/矩阵的:内积/点积,外积/叉积

    线性代数的学习和整理23:用EXCEL和python 计算向量/矩阵的:内积/点积,外积/叉积

      目录 1 乘法 1.1 标量乘法(中小学乘法) 1.1.1 乘法的定义 1.1.2 乘法符合的规律 1.2 向量乘法 1.2.1 向量:有方向和大小的对象 1.2.2 向量的标量乘法 1.2.3 常见的向量乘法及结果 1.2.4 向量的其他乘法及结果 1.2.5 向量的模长(长度) 模长的计算公式 1.2.6 距离 2 向量的各种乘法 2

    2024年01月23日
    浏览(30)
  • 四元数,旋转矩阵,欧拉角互转(python)

    运行代码之前需要安装pyquaternion和scipy。 pip install pyquaternion pip install scipy 代码之前放下面,main函数有使用的方式

    2024年02月12日
    浏览(14)
  • python 根据两个向量,求的之间的旋转矩阵:

    python 根据两个向量,求的之间的旋转矩阵:

    项目遇到一个问题,就是需要根据 原始向量 和 目标向量 求他们两个之间的 旋转矩阵 ,网上结果很少,也有很多错误,因此写了一个,项目中使用过程没出现问题。         原理参考的是知乎大佬的对   Rodrigues\\\' rotation formula  和 知乎 的总结,主要如下:

    2024年02月13日
    浏览(9)
  • python transforms3d,不同旋转方式与对应的旋转矩阵

    网上常看到的用法: 这种调用默认的是绕着物体上与基坐标系平行的坐标系旋转的,顺序是“x-y-z”,完整的写法是: 这里第四个参数的可选项为: 个人理解,这里的“s”表示的是“static”,即绕静坐标系(基坐标系)旋转;“r”表示“relative”,即相对坐标系(物体的连

    2024年02月13日
    浏览(14)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包