Matlab:如何做“replem”,其中每个元素都是一个矩阵?

tzdcorbm  于 2023-01-17  发布在  Matlab
关注(0)|答案(1)|浏览(220)

假设我有排列成m × n × 3TensorP的m × n矩阵A、B、C:

P = cat(3, A, B, C);

现在我想创建一个新的Tensor,其中每个矩阵重复K次,使第三维大小为3K。也就是说,如果K=2,那么我想创建Tensor

Q = cat(3, A, A, B, B, C, C);

有没有一个很好的内置方式来实现这个,或者我需要为它写一个循环?最好是一样快或比手动方式更快。
如果A、B、C是标量,我可以使用repelem,但它不像我想要的那样工作于矩阵。

cat(3, A, B, C, A, B, C)

但那也不是我想要的。

qjp7pelc

qjp7pelc1#

正如@Cris Luengo所指出的,repelem(P, 1, 1, k)实际上会做你想做的事情(不管MATLAB文档怎么说),但是我可以想到另外两种方法来实现这一点。
首先,可以使用repmatsecond维中复制Tensork次,然后重新整形:

Q = reshape(repmat(P, 1, k, 1), m, n, []);

第二,你可以使用repelem来给予第三维的索引,从而从以下内容构造Q

Q = P(:, :, repelem(1:size(P,3), k));

相关问题