用特定的方式重复矩阵,创建一个三维数组

3

我想以一种不使用repmat函数的方式重复一个矩阵。也就是说,我希望得到一个矩阵B,它的按列截面将给我矩阵A。当我使用repmat(A,[1,1,col_nb])时,你需要在第三个维度上进行截面,才能得到矩阵A。

下面是一个例子:

A = [1,2,3;4,5,6];
not_B = repmat(A,[1,1,3]); % What I am getting at the moment

% not_B(:,:,1) = A
% not_B(:,:,2) = A
% not_B(:,:,3) = A

% What I would like
B(:,1,:) = A;
B(:,2,:) = A;
B(:,3,:) = A;
2个回答

3

我相信你需要的只是调用 permute 函数:

B = permute(repmat(A, [1 1 3]), [1 3 2]);

需要注意的是,从 B(:, i, :) 得到的矩阵将不再是 3x3。它们将变成 3x1x3。您可能希望使用 squeeze 函数来处理:

C = squeeze(B(:, 1, :));  % C will match A

3

您可以使用repelem函数避免额外的permute操作:

[r c] = size(A);
rep = 3;
B = reshape(repelem(A,1,rep),r,rep,c)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接