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

如何对张量中的矩阵元素执行类似repelem的重复操作?

实现MATLAB中张量第三维度切片的逐元素重复(无循环)

需求回顾

已有m×n的矩阵A、B、C,拼接为m×n×3的张量P = cat(3, A, B, C),需要将每个第三维度的切片连续重复K次,生成m×n×3K的张量(例如K=2时,结果为cat(3, A, A, B, B, C, C)),要求使用内置函数、无循环且效率不低于手动拼接。

解决方案

以下两种方法均为矢量化内置函数操作,满足需求且效率优异:

方法1:索引重复(最简洁直观)

通过repelem生成重复的第三维度索引,直接索引原张量即可:

P = cat(3, A, B, C);
idx = repelem(1:size(P,3), K);  % 生成重复索引,如K=2时为[1,1,2,2,3,3]
Q = P(:,:,idx);

该方法利用MATLAB优化后的索引操作实现切片连续重复,代码简洁,效率远高于循环,甚至优于多次手动cat拼接。

方法2:reshape与permute组合

通过扩展维度、交换维度再合并的方式实现:

P = cat(3, A, B, C);
% 先将每个切片复制K次,扩展为m×n×3×K的张量
temp = repmat(P, 1, 1, 1, K);
% 交换第三、第四维度,将重复切片调整为连续排列,再合并后两个维度
Q = reshape(permute(temp, [1 2 4 3]), size(P,1), size(P,2), []);

该方法通过维度变换实现需求,适合需要对维度操作有更精细控制的场景,效率同样出色。

验证示例

当K=2时,两种方法生成的Q均等价于cat(3, A, A, B, B, C, C),完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 02:40:56