如何实现WxH数组按2的幂次缩放,原数值对应填充扩大区域
数组2的幂次缩放实现逻辑
这个需求属于整数倍最近邻上采样,缩放系数为2的正整数次幂,核心是原数组的每个元素会对应填充新数组中s×s的连续同值区域(s为缩放系数),具体实现步骤如下:
- 首先确定基础参数
先明确缩放系数s:如果传入的是幂次k,直接计算s = 2 ** k即可。设原数组高度为H、宽度为W,那么新数组的尺寸就是(H*s) × (W*s)。 - 行维度拉伸
遍历原数组的每一行,将该行的每个元素都连续重复s次,生成拉伸后的单行数据。比如原行[1,2]、s=2时,拉伸后行就是[1,1,2,2]。 - 列维度拉伸
将上一步生成的每一条拉伸后的行,连续重复写入新数组s次,完成纵向的拉伸。比如上面的拉伸行[1,1,2,2]、s=2时,就连续往新数组里写2次该行。
代码示例
原生Python实现(无第三方依赖)
def power_of_two_scale(old_array, scale_power): # scale_power为2的幂次,比如缩放2倍传1,缩放4倍传2 scale = 2 ** scale_power new_array = [] for raw_row in old_array: # 行内元素重复 scaled_row = [item for item in raw_row for _ in range(scale)] # 整行重复加入新数组 for _ in range(scale): new_array.append(scaled_row.copy()) return new_array # 测试验证 old_array = [[1,2], [3,4]] # 缩放2倍,输出和题目示例一致 print(power_of_two_scale(old_array, 1))
Numpy高效实现(适合大数据量场景)
import numpy as np def power_of_two_scale_np(old_array, scale_power): scale = 2 ** scale_power arr = np.array(old_array) # 先沿纵向重复,再沿横向重复 scaled_arr = np.repeat(np.repeat(arr, scale, axis=0), scale, axis=1) return scaled_arr.tolist()
内容的提问来源于stack exchange,提问作者bob marsh
相关产品推荐
相关产品推荐

