如何将矩阵顺时针旋转 90 度加速?
How can I speed-up a matrix rotation by 90 degrees clockwise?
将方阵旋转 90 度,复杂度为 O(1) space。我已经使用 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]]
如果您追求的是速度,那么您使用的数组类型有误。您需要切换到 numpy 数组而不是列表。在 Numpy 中当然有一个函数用于这样的操作:rot90
不需要外部库或 zip。将其用于采访:
- 沿 x 轴翻转。
- 对角交换坐标
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
将方阵旋转 90 度,复杂度为 O(1) space。我已经使用 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]]
如果您追求的是速度,那么您使用的数组类型有误。您需要切换到 numpy 数组而不是列表。在 Numpy 中当然有一个函数用于这样的操作:rot90
不需要外部库或 zip。将其用于采访:
- 沿 x 轴翻转。
- 对角交换坐标
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