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

如何按自定义行选取规则行向合并矩阵生成新矩阵?

嘿,这个按固定行块循环合并矩阵的需求,其实用矩阵拆分+按顺序拼接就能轻松搞定!我给你分别用MATLAB和Python(numpy)两种常用工具来实现,逻辑都是一致的~

MATLAB实现

首先先定义好三个原始矩阵:

A = [1 2 3; 4 5 6; 7 8 9];
B = [10 11 12; 13 14 15; 16 17 18; 19 20 21; 22 23 24; 25 26 27];
C = [28 29 30; 31 32 33; 34 35 36; 37 38 39; 40 41 42; 43 44 45; 46 47 48; 49 50 51; 52 53 54];

接下来把每个矩阵按需求拆分成对应大小的行块:

  • A要拆成3个1行3列的块(刚好对应3次循环)
  • B要拆成3个2行3列的块
  • C要拆成3个3行3列的块

用mat2cell函数就能完成拆分:

A_blocks = mat2cell(A, ones(1,3), 3);  % 每个块1行
B_blocks = mat2cell(B, 2*ones(1,3), 3); % 每个块2行
C_blocks = mat2cell(C, 3*ones(1,3), 3); % 每个块3行

最后循环拼接每个循环单元(A块→B块→C块),逐步构建目标矩阵D:

D = [];
for i = 1:3
    D = [D; A_blocks{i}; B_blocks{i}; C_blocks{i}];
end

运行后得到的D就是你想要的合并矩阵啦!

Python(numpy)实现

如果用Python的话,借助numpy库的矩阵操作会非常方便:

先导入numpy并定义原始矩阵:

import numpy as np

A = np.array([[1,2,3],[4,5,6],[7,8,9]])
B = np.array([[10,11,12],[13,14,15],[16,17,18],[19,20,21],[22,23,24],[25,26,27]])
C = np.array([[28,29,30],[31,32,33],[34,35,36],[37,38,39],[40,41,42],[43,44,45],[46,47,48],[49,50,51],[52,53,54]])

用np.split函数按行拆分矩阵:

A_blocks = np.split(A, 3, axis=0)  # 拆成3个(1,3)的子数组
B_blocks = np.split(B, 3, axis=0)  # 拆成3个(2,3)的子数组
C_blocks = np.split(C, 3, axis=0)  # 拆成3个(3,3)的子数组

最后用列表推导式+垂直拼接完成合并:

# 先拼接每个循环单元,再把所有单元拼起来
D = np.vstack([np.vstack([A_blocks[i], B_blocks[i], C_blocks[i]]) for i in range(3)])

打印D就能看到和需求一致的结果啦~

补充说明

这个方法的核心是保证三个矩阵的行数刚好是循环次数的整数倍:A行数=循环次数×1,B行数=循环次数×2,C行数=循环次数×3。这里循环次数是3,完美匹配你的数据。如果以后数据行数变化,只要调整循环次数和拆分的块大小就能复用这个逻辑哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:22:28