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

如何将矩阵分割为m×n子矩阵?余数单独组成子矩阵

矩阵分割为m×n子矩阵的可行实现方法

你之前用np.reshape失败的核心原因是:这个方法要求矩阵总元素数必须和新形状的元素总数完全匹配。比如你的例子里原矩阵有9个元素,按m=2、n=2计算需要的子矩阵数量是3,3×2×2=12,和9不相等,自然会报错。

想要实现“整除则分块,剩余元素单独成子矩阵”的需求,用np.array_split就可以搞定,它支持不等长的分割,自动处理剩余部分。具体实现步骤如下:

完整代码示例

import numpy as np

# 测试矩阵
matrix = np.array([[1, 0, 1], [0, 0, 0], [0, 1, 1]])
m, n = 2, 2  # 目标子矩阵尺寸

rows, cols = matrix.shape

# 先按行分割,每m行一块,剩余行单独成块
row_chunks = np.array_split(matrix, range(m, rows, m), axis=0)

submatrices = []
# 对每个行块,再按列分割,每n列一块,剩余列单独成块
for chunk in row_chunks:
    col_subchunks = np.array_split(chunk, range(n, chunk.shape[1], n), axis=1)
    submatrices.extend(col_subchunks)

# 打印结果
for idx, submat in enumerate(submatrices, 1):
    print(f"第{idx}个子矩阵:")
    print(submat)
    print("-"*10)

输出结果

第1个子矩阵:
[[1 0]
 [0 0]]
----------
第2个子矩阵:
[[1]
 [0]]
----------
第3个子矩阵:
[[0 1]]
----------
第4个子矩阵:
[[1]]
----------

逻辑说明

  1. 先按行方向分割原矩阵,每次取m行,最后剩下的不足m行的部分自动作为一个行块;
  2. 对每个行块,再按列方向分割,每次取n列,剩下的不足n列的部分自动作为一个子矩阵;
  3. 把所有分割得到的子矩阵收集起来,就是最终结果。

这个方法不管原矩阵的行、列数是否能被m、n整除,都能完美适配你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:05:22