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

如何编写生成特定嵌套结构N×N矩阵扁平化列表的函数?

问题描述

需要编写函数,输入奇数N,返回对应N×N矩阵的扁平化列表。矩阵规律为中心值为1,每向外一层数值递增2,示例如下:

3×3矩阵及其扁平化结果:

a_3x3 = [   # 3x3像素窗口
    [3,3,3],
    [3,1,3],
    [3,3,3]
]
a_3x3_lis = [3, 3, 3, 3, 1, 3, 3, 3, 3] # 扁平化后的列表

5×5矩阵及其扁平化结果:

a_5x5 = [       # 5x5像素窗口
    [5,5,5,5,5],
    [5,3,3,3,5],
    [5,3,1,3,5],
    [5,3,3,3,5],
    [5,5,5,5,5]
]
a_5x5_lis = [5, 5, 5, 5, 5, 5, 3, 3, 3, 5, 5, 3, 1, 3, 5, 5, 3, 3, 3, 5, 5, 5, 5, 5, 5] # 扁平化后的列表

手动创建仅适用于小矩阵,需自动化实现方法。

自动化实现方案

规律分析

矩阵中每个位置的数值由其到中心的切比雪夫距离决定:

  • 设矩阵中心坐标为(center, center),其中center = N // 2(N为奇数)
  • 任意位置(i,j)到中心的切比雪夫距离为max(abs(i - center), abs(j - center))
  • 该位置的数值为 2 * 距离 + 1

实现代码

方法一:直接生成扁平化列表(高效简洁)

def generate_flattened_window(n):
    if n % 2 == 0:
        raise ValueError("N必须是奇数")
    center = n // 2
    return [2 * max(abs(i - center), abs(j - center)) + 1 
            for i in range(n) 
            for j in range(n)]

方法二:先生成矩阵再扁平化(便于调试)

如果需要先查看完整矩阵再扁平化,可使用此方法:

def generate_flattened_window(n):
    if n % 2 == 0:
        raise ValueError("N必须是奇数")
    center = n // 2
    # 生成矩阵
    matrix = []
    for i in range(n):
        row = []
        for j in range(n):
            distance = max(abs(i - center), abs(j - center))
            row.append(2 * distance + 1)
        matrix.append(row)
    # 扁平化矩阵
    return [num for row in matrix for num in row]

测试验证

# 测试3x3
print(generate_flattened_window(3))
# 输出:[3, 3, 3, 3, 1, 3, 3, 3, 3]

# 测试5x5
print(generate_flattened_window(5))
# 输出:[5, 5, 5, 5, 5, 5, 3, 3, 3, 5, 5, 3, 1, 3, 5, 5, 3, 3, 3, 5, 5, 5, 5, 5, 5]

# 测试7x7
print(generate_flattened_window(7))
# 输出与示例的near_win_7x7完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 15:20:30