如何将指定3×5矩阵重排为目标5×3矩阵?
如何将3×5矩阵重排为指定的5×3矩阵
给定3×5原矩阵:
[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]]
需要转换为如下5×3矩阵:
[[15, 10, 5], [14, 9, 4], [13, 8, 3], [12, 7, 2], [11, 6, 1]]
转换逻辑
观察元素映射规律:
- 原矩阵的最后一列(5,10,15)逆序成为目标矩阵第一行(15,10,5)
- 原矩阵的倒数第二列(4,9,14)逆序成为目标矩阵第二行(14,9,4)
- 以此类推,原矩阵的第一列(1,6,11)逆序成为目标矩阵第五行(11,6,1)
本质是:逆序提取原矩阵的列,再将每一列的元素逆序,作为新矩阵的行。
Python 实现方法
方法1:纯列表推导式(无需第三方库)
# 定义原矩阵 matrix = [ [1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15] ] # 一步完成转换 result = [list(col[::-1]) for col in reversed(zip(*matrix))] # 输出结果 for row in result: print(row)
输出:
[15, 10, 5] [14, 9, 4] [13, 8, 3] [12, 7, 2] [11, 6, 1]
分步解释(更易理解)
# 1. 转置原矩阵,得到所有列的元组列表 transposed = list(zip(*matrix)) # 此时 transposed = [(1,6,11), (2,7,12), (3,8,13), (4,9,14), (5,10,15)] # 2. 逆序排列列,从右到左取列 reversed_cols = reversed(transposed) # 此时 reversed_cols 迭代顺序为 (5,10,15), (4,9,14), ..., (1,6,11) # 3. 对每个列逆序元素,并转为列表 result = [list(col[::-1]) for col in reversed_cols]
方法2:使用Numpy(适合大规模矩阵)
如果处理大型矩阵,Numpy的向量化操作效率更高:
import numpy as np matrix = np.array([ [1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15] ]) # 反转原矩阵的列顺序,再转置,最后反转行顺序 result = np.flip(matrix, axis=1).T[::-1] # 输出结果 print(result)
输出:
[[15 10 5] [14 9 4] [13 8 3] [12 7 2] [11 6 1]]
内容的提问来源于stack exchange,提问作者Nobody
相关产品推荐
相关产品推荐

