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

Numpy如何自动将多个子块拼接生成目标二维数组

Numpy子矩阵自动拼接解决方案

自动拼接的核心逻辑是先明确子块的网格排布规则,再自动生成np.block需要的嵌套列表,无需手动编写排布结构。以下是两种常用场景的实现方案:

场景1:子块按行优先顺序存储,已知网格行列数

如果你的子矩阵在集合中按「先填完第一行所有子块,再填第二行,以此类推」的顺序存储,且已知子块排布的总网格行数grid_rows、总网格列数grid_cols,可以直接用数组reshape生成嵌套列表:

import numpy as np

# 模拟你的子矩阵集合
set_of_arrays = [
    np.array([[5, 3], [1, 5], [8, -1], [6, 6]]), # 网格(0,0)位置
    np.array([[1,2,3,4,5,6], [4,5,6,7,8,9], [7,8,9,0,1,2], [0,1,2,3,4,5]]), # 网格(0,1)位置
    np.array([[5,3], [5,3]]), # 网格(1,0)位置
    np.array([[1,5,8,-1,6,6], [1,5,8,-1,6,6]]) # 网格(1,1)位置
]

# 配置子块网格参数
grid_rows = 2
grid_cols = 2

# 自动生成嵌套排布列表
block_nested_list = np.array(set_of_arrays, dtype=object).reshape(grid_rows, grid_cols).tolist()

# 拼接得到目标矩阵
M = np.block(block_nested_list)

场景2:子块无固定存储顺序,已知每个子块的网格坐标

如果子块是零散存储的,你只需要提前整理出每个子块对应的「网格行索引、列索引」映射关系,即可自动填充嵌套列表:

import numpy as np

# 模拟你的子矩阵集合
set_of_arrays = {
    7: np.array([[5, 3], [1, 5], [8, -1], [6, 6]]),
    8: np.array([[1,2,3,4,5,6], [4,5,6,7,8,9], [7,8,9,0,1,2], [0,1,2,3,4,5]]),
    123: np.array([[5, 3, 1, 5, 8, -1, 6, 6], [5, 3, 1, 5, 8, -1, 6, 6]])
}

# 配置子块网格参数与位置映射
grid_rows = 2
grid_cols = 2
block_pos_map = {
    (0, 0): set_of_arrays[7],
    (0, 1): set_of_arrays[8],
    (1, 0): set_of_arrays[123][:, :2],
    (1, 1): set_of_arrays[123][:, 2:]
}

# 自动生成嵌套排布列表
block_nested_list = [[None for _ in range(grid_cols)] for _ in range(grid_rows)]
for (i, j), block in block_pos_map.items():
    block_nested_list[i][j] = block

# 拼接得到目标矩阵
M = np.block(block_nested_list)

注意事项

  • 同网格行的所有子块高度必须一致,同网格列的所有子块宽度必须一致,你已经明确所有子块满足拼接要求,不会出现报错
  • 如果子块数量不固定,只需要动态调整grid_rows、grid_cols和映射规则即可,不需要修改核心拼接逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:24:01