放大矩阵重复其值

Enlarge matrix repeating its values

我需要将矩阵 A 扩大到矩阵 B,其大小是 An 倍。值必须重复,例如:

A 尺寸 2x3,n = 3,导致 B 尺寸 6x9:

示例值:

A =  
1 2 3  
4 5 6  

结果:

B =  
1 1 1 2 2 2 3 3 3    
1 1 1 2 2 2 3 3 3  
1 1 1 2 2 2 3 3 3  
4 4 4 5 5 5 6 6 6  
4 4 4 5 5 5 6 6 6   
4 4 4 5 5 5 6 6 6  

在 Matlab 中实现该目标的最快方法是什么?

如果您有图像处理工具箱,您可以使用 imresize 和最近邻插值法轻松完成此操作。

A = [1 2 3; 4 5 6];

% Repeat each element 3 times in each direction
B = imresize(A, 3, 'nearest');

%   1     1     1     2     2     2     3     3     3
%   1     1     1     2     2     2     3     3     3
%   1     1     1     2     2     2     3     3     3
%   4     4     4     5     5     5     6     6     6
%   4     4     4     5     5     5     6     6     6
%   4     4     4     5     5     5     6     6     6

如果您没有图像处理工具箱,您可以使用 interp2 和最近邻插值来做类似的事情。

scaleFactor = 3;


[xx,yy] = meshgrid(linspace(1, size(A, 2), size(A, 2) * scaleFactor), ...
                   linspace(1, size(A, 1), size(A, 1) * scaleFactor));


B = interp2(A, xx, yy, 'nearest');

还有克罗内克张量积(kron)函数:

n = 3;
B = kron(A,ones(n));

B =

     1     1     1     2     2     2     3     3     3
     1     1     1     2     2     2     3     3     3
     1     1     1     2     2     2     3     3     3
     4     4     4     5     5     5     6     6     6
     4     4     4     5     5     5     6     6     6
     4     4     4     5     5     5     6     6     6