【问题标题】:How can I speed-up a matrix rotation by 90 degrees clockwise?如何将矩阵顺时针旋转 90 度加速?
【发布时间】:2025-12-31 12:15:11
【问题描述】:

使用 O(1) 额外空间将方阵旋转 90 度。我已经使用 Python 来解决它。我想知道我是否可以进一步改进我的代码。

def rotate_by_90(m):
  # unpacking arguments with zip(*) in reverse with [ : :-1]
  tuples = zip(*m[::-1])
  # flattening tuples to list with [list(i)]
  return [list(i) for i in tuples]

def makeMatrix(array, size):
  # validating size of matrix for given array
  if (size**2!=len(array)):
    return -1
  # make sub array of length size using array slicing  
  else:
    matrix = [array[i:i+size] for i in range(0, len(array), size)]
    return rotate_by_90(matrix)

arr = [1,2,3,4]
dimension = 2
result = makeMatrix(arr, dimension)
# Original Matrix: [[1, 2], [3, 4]]
# Result: [[3, 1], [4, 2]]

【问题讨论】:

  • 你能在你的问题中定义improve吗?快点?现在有什么问题需要改进?
  • 是的,有没有可能让它变得更快?例如,如果维度增加到 10000。

标签: python arrays python-3.x matrix rotation


【解决方案1】:

无需外部库或 zip。用它来面试:

  1. 沿 x 轴翻转。
  2. 对角交换坐标

def rotate_by_90(m): a.reverse() for i in range(len(a)): for j in range(i): a[i][j], a[j][i] = a[j][i], a[i][j] return a

【讨论】:

    【解决方案2】:

    如果您正在寻找速度,那么您使用了错误类型的数组。您需要切换到 numpy 数组而不是列表。在 Numpy 中当然有这样的操作函数:rot90

    【讨论】:

    • 非常感谢。会试试的。