假设我有 m×n 矩阵 A、B、C,排列在 m×n×3 张量 P 中:
P = cat(3, A, B, C);
我现在想要创建一个新的张量,其中每个矩阵重复 K 次,使第三维大小为 3K。也就是说,如果 K=2 那么我想构建张量
Q = cat(3, A, A, B, B, C, C);
是否有一个很好的内置方法来实现此目的,或者我需要为其编写一个循环?最好与手动方式一样快或更快。
如果 A、B、C 是标量,我可以使用 repelem
,但它不能按照我想要的矩阵方式工作。 repmat
可用于构建
cat(3, A, B, C, A, B, C)
但这也不是我所追求的。
最佳答案
As noted通过 @Cris Luengo , repelem(P, 1, 1, k)
实际上会做你想做的事情(不管 MATLAB 文档怎么说),但我可以想到另外两种方法来实现这一点。
首先,您可以使用 repmat
在第二维度中复制张量 k
次,然后 reshape :
Q = reshape(repmat(P, 1, k, 1), m, n, []);
其次,您可以使用 repelem
为您提供第三维的索引,以便从以下位置构造 Q
:
Q = P(:, :, repelem(1:size(P,3), k));
关于arrays - Matlab:如何执行 `repelem` 其中每个元素都是矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75120107/