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

如何通过重复矩阵行实现矩阵扩容?附实例与实现代码

如何实现矩阵每行重复指定次数的扩容

嘿,这个需求其实有好几种直观的实现方式,我给你拆解一下~咱们以你给出的初始矩阵 A = [1 2 3; 4 5 6; 7 8 9] 为例,目标是把每一行重复3次得到9×3的矩阵B。

方法1:用repelem函数(最直观)

MATLAB从R2015a版本开始提供了repelem函数,专门用来按元素/行/列重复数组,语法非常直白:

A = [1 2 3; 4 5 6; 7 8 9];
repeat_times = 3; % 每行重复的次数
B = repelem(A, repeat_times, 1);
  • 第二个参数repeat_times指定行方向的重复次数,这里所有行都重复3次;
  • 第三个参数1表示列方向不重复;
  • 运行后直接得到你想要的结果:每行连续重复3次的矩阵B。

方法2:用kron克罗内克积

如果你习惯用矩阵运算的思路,克罗内克积也能轻松实现这个效果:

A = [1 2 3; 4 5 6; 7 8 9];
B = kron(A, ones(3, 1));
  • ones(3,1)是一个3行1列的全1矩阵;
  • 克罗内克积kron(A, M)会把A的每个元素和矩阵M做“扩展相乘”,对于整行来说,就相当于把A的每一行重复3次(因为和全1矩阵相乘,行元素会被复制3次)。

方法3:拆解你提到的permute+replicate思路

你给出的代码B = replicate(permute(A,[3 2 1]),3,1)其实是利用维度变换来实现重复,咱们拆解一下逻辑:

  1. permute(A,[3 2 1]):把原二维矩阵A(维度为[3,3])转换成三维数组,维度变为[1,3,3](相当于把原行维度转到了第三个维度);
  2. replicate(...,3,1):在第一个维度上重复3次,得到维度为[3,3,3]的三维数组;
  3. 最后再把维度转回来,就能得到每行重复3次的二维矩阵。

不过这里要注意:MATLAB里没有原生的replicate函数,大概率是repelem的笔误,修正后的完整代码可以是:

A = [1 2 3; 4 5 6; 7 8 9];
B = permute(repelem(permute(A,[3 2 1]),3,1), [3 2 1]);

这种方式适合理解数组维度的变换逻辑,不过相比前两种方法稍显繁琐。

内容的提问来源于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 11:32:35