You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python实现基于最近邻算法的指定缩放因子2D数组放大?

基于最近邻算法的2D数组缩放实现(非块填充)

你需要的是基于真实距离计算的最近邻缩放,而非简单的块填充。以下是实现思路和代码:

需求说明

给定原始2D数组:

[[1, 2],
 [3, 4]]

缩放因子为3时,最终要得到的结果是:

[[1, 1, 2, 2, 2, 2],
 [1, 1, 2, 2, 2, 2],
 [3, 3, 4, 4, 4, 4],
 [3, 3, 4, 4, 4, 4],
 [3, 3, 4, 4, 4, 4],
 [3, 3, 4, 4, 4, 4]]

核心区别是:每个位置的值由距离它最近的原始数组元素决定,而非归属某个固定块。

实现代码

def nearest_neighbor_scale(original, scale):
    rows = len(original)
    cols = len(original[0]) if rows > 0 else 0
    new_rows = rows * scale
    new_cols = cols * scale
    scaled = [[0]*new_cols for _ in range(new_rows)]
    
    # 先放置原始数组的元素到对应缩放位置
    for oi in range(rows):
        for oj in range(cols):
            scaled[oi*scale][oj*scale] = original[oi][oj]
    
    # 遍历每个缩放后位置,计算最近邻值
    for i in range(new_rows):
        for j in range(new_cols):
            min_dist_sq = float('inf')
            closest_val = 0
            # 遍历所有原始元素的缩放位置,找最近的
            for oi in range(rows):
                for oj in range(cols):
                    ox, oy = oi*scale, oj*scale
                    # 计算距离平方(避免开根号,提升效率)
                    dist_sq = (i - ox)**2 + (j - oy)**2
                    if dist_sq < min_dist_sq:
                        min_dist_sq = dist_sq
                        closest_val = original[oi][oj]
                    # 距离为0说明是原始点,直接跳过后续计算
                    if dist_sq == 0:
                        break
            scaled[i][j] = closest_val
    return scaled

# 测试示例
original_array = [[1, 2], [3, 4]]
scale_factor = 3
result = nearest_neighbor_scale(original_array, scale_factor)

# 打印结果
for row in result:
    print(row)

代码说明

  1. 初始化缩放数组:先将原始数组的每个元素放到缩放后的对应位置(oi*scale, oj*scale),和你给出的初始放大数组一致。
  2. 计算最近邻:对缩放后的每个位置(i,j),遍历所有原始元素的缩放位置,计算两者的距离平方(用平方代替欧氏距离,避免开根号的性能损耗),取距离最小的原始元素值填充当前位置。
  3. 关键逻辑:比如位置(0,2),到原始点(0,0)的距离平方是4,到(0,3)的距离平方是1,因此会选择值2填充,完全符合你的需求。

内容的提问来源于stack exchange,提问作者Alejandro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 00:53:12