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

如何通过for循环对矩阵数据进行正方形分块?以20×20矩阵分10×10块为例

矩阵分块实现方案

针对你的需求,这里提供两种Python实现方式,分别适配普通二维列表和数值矩阵场景:

一、纯Python列表实现(通用场景)

如果你的data是普通二维列表,可通过遍历行/列的起始索引,提取对应范围的子列表来生成块:

# 示例20×20矩阵(替换为你的实际数据)
data = [[i*20 + j for j in range(20)] for i in range(20)]
chunk_size = 10

rows = len(data)
cols = len(data[0]) if rows > 0 else 0

chunks = []
# 遍历行块起始位置
for y_start in range(0, rows, chunk_size):
    y_end = min(y_start + chunk_size, rows)  # 兼容行数不是chunk_size整数倍的情况
    # 遍历列块起始位置
    for x_start in range(0, cols, chunk_size):
        x_end = min(x_start + chunk_size, cols)  # 兼容列数不匹配的情况
        # 提取当前块:截取指定行范围,每行再截取指定列范围
        current_chunk = [row[x_start:x_end] for row in data[y_start:y_end]]
        chunks.append(current_chunk)

# 验证输出(可选)
for idx, chunk in enumerate(chunks):
    print(f"chunk{idx} = y{y_start}-{y_end-1}, x{x_start}-{x_end-1}")

代码会按你要求的顺序生成块:先处理上方行块的左→右列块,再处理下方行块的左→右列块。

二、NumPy实现(数值矩阵高效处理)

如果你的矩阵是数值型数据,用NumPy会更简洁高效,尤其适合大规模矩阵:

import numpy as np

data_np = np.array(data)  # 将列表转成NumPy数组
chunk_size = 10
rows, cols = data_np.shape

# 方法1:分步分割(兼容非整数倍的矩阵尺寸)
row_splits = np.array_split(data_np, rows // chunk_size, axis=0)
chunks = []
for row_block in row_splits:
    col_splits = np.array_split(row_block, cols // chunk_size, axis=1)
    chunks.extend(col_splits)

# 方法2:一次性重塑(仅当行数/列数是chunk_size整数倍时可用)
# chunks = data_np.reshape(rows//chunk_size, chunk_size, cols//chunk_size, chunk_size) \
#                .swapaxes(1, 2) \
#                .reshape(-1, chunk_size, chunk_size)

两种方法生成的chunks列表中,每个元素都是对应大小的子矩阵(NumPy数组)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 18:40:45