Python如何对方阵整数倍Scale/resize且保留网格结构
整数倍矩阵块缩放实现
你对缩放规则的判断完全正确,这种操作是整数因子的块复制上采样:仅支持正整数n作为缩放因子,原矩阵每个元素会被替换为n×n的同值子块,最终输出矩阵尺寸为原矩阵行数*n × 原矩阵列数*n,你给出的示例就是n=2时3×3单位矩阵放大为6×6块对角矩阵的标准结果。
实现方案
无依赖纯Python实现
不需要安装任何第三方库,按行、列两个维度做元素复制即可:
- 遍历原矩阵每一行,将行内每个元素重复n次,得到宽度放大n倍的中间行
- 将每个中间行整体重复n次追加到结果中,完成高度方向的放大
代码如下:
def upscale_matrix(original_mat, n): result = [] for row in original_mat: # 行方向扩展:每个元素重复n次 expanded_row = [] for value in row: expanded_row += [value] * n # 列方向扩展:整行重复n次 for _ in range(n): result.append(expanded_row.copy()) return result # 验证示例 arr = [[1,0,0], [0,1,0], [0,0,1]] largeArr = upscale_matrix(arr, 2) for r in largeArr: print(r)
运行后输出和你给出的6×6矩阵完全一致:
[1, 1, 0, 0, 0, 0] [1, 1, 0, 0, 0, 0] [0, 0, 1, 1, 0, 0] [0, 0, 1, 1, 0, 0] [0, 0, 0, 0, 1, 1] [0, 0, 0, 0, 1, 1]
NumPy高效实现
如果是做数值计算、处理大尺寸矩阵,直接用NumPy内置的repeat方法即可,不需要手写循环,运行效率高很多:
import numpy as np arr = np.array([[1,0,0], [0,1,0], [0,0,1]]) n = 2 largeArr = arr.repeat(n, axis=1).repeat(n, axis=0) print(largeArr)
注意:如果使用非整数缩放因子,必须引入插值逻辑,会破坏原矩阵的离散块结构,无法保留原本的网格排布规律,不符合你的需求。
内容的提问来源于stack exchange,提问作者Wulfgar
相关产品推荐
相关产品推荐

