我发现了一种复制矩阵维度的简单方法,但我不明白:
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])
它返回完全相同的结果。有人可以解释第二种方法的工作原理和原因吗?
答案 0 :(得分:2)
让我们看一个更简单的例子:
A = [1,2,3,4,5]*10;
现在我确定你会同意A(1) = 10
,A(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])
相同。