两种复制矩阵的方法

时间:2014-01-16 08:49:35

标签: matlab matrix repeat tiling

我发现了一种复制矩阵维度的简单方法,但我不明白:

A=[1,2;3,4]  
A1=repmat(A,[1 1 2]); 

返回

A1(:,:,1)=[1 2; 3 4 ]    
A1(:,:,2)=[1 2; 3 4]

如果我这样做

A2=A(:,:,[1 1])

它返回完全相同的结果。有人可以解释第二种方法的工作原理和原因吗?

1 个答案:

答案 0 :(得分:2)

让我们看一个更简单的例子:

A = [1,2,3,4,5]*10;

现在我确定你会同意A(1) = 10A(2) = 20等,但我们也可以使用索引向量来处理矩阵,例如A([1,3])会返回[10,30],但您也可以重复索引,它只会对同一个元素进行两次处理:A([1,1])返回[10,10]

现在让我们添加一个维度:

A = [1,2,3;
     4,5,6;
     7,8,9]*10;

因此A(1,:)会返回[10,20,30]。但是A([1,1],:)怎么样?这将两次返回第一行!所以[10,20,30;10,20,30]

但是第三维呢? A是3x3 2D矩阵吗?是的,但它也是一个3x3x1的3D矩阵。所以A == A(:,:,1),这意味着通过与上面相同的逻辑A(:,:,[1,1])将只返回第三个维度两次,因此与repmat(A, [1,1,2])相同。