将矩阵旋转90度,请用最快的方法实现
例如
[ [1,2], [3,4] ] # rotate it by 90 degree(clockwise),return [ [3,1], [4,2] ]
实现方法是采用numpy完成的。
方法一:
import numpy as np a = np.arange(1,5).reshape(2,2) print(a) #仅为测试 # [[1 2] # [3 4]] k = np.zeros(a.shape[0],dtype=a.dtype) print(k) #仅为测试 # [0 0] for x in np.nditer(a, flags = ['external_loop'],order = 'F'): x = x[ :: -1] k = np.vstack((k, x)) print(np.delete(k,0,axis=0)) # [[3 1] # [4 2]]
为了测试,我们现在进行3*3矩阵测试
import numpy as np # 注解:首先生成一个矩阵 a = np.arange(0,9).reshape(3,3) print(a) #仅为测试 # [[0 1 2] # [3 4 5] # [6 7 8]] # 创建一个一维数组(a.shape[0]列)、其数据类型与a.dtype保持一致 k = np.zeros(a.shape[0],dtype=a.dtype) print(k) #仅为测试 # [0 0 0] # 使用numpy的内部循环将数组进行单独取列操作 for x in np.nditer(a, flags = ['external_loop'],order = 'F'): # 对每一列取反,以在组合时达到90翻转效果 x = x[ :: -1] # 垂直组合 k = np.vstack((k, x)) # 去掉原数组中第一行初始值 print(np.delete(k,0,axis=0)) # [[6 3 0] # [7 4 1] # [8 5 2]]
方法二
a = np.arange(0,9).reshape(3,3) print(a) # [[0 1 2] # [3 4 5] # [6 7 8]] i = 0 for x in np.nditer(a, flags = ['external_loop'],order = 'F'): x = x[ :: -1] if i == 0: k = x else: k = np.vstack((k, x)) i += 1 print(k) # [[6 3 0] # [7 4 1] # [8 5 2]]
该方法是利用判断语句进行的操作。
这是一道别人在前几天遇到的面试题,在学习到numpy时,突然脑路中出现了这个现象,就尝试做一做,发现竟然能够解决。