2013-05-03 29 views
4

我有关于MATLAB包河一个问题这是我得到R matlab包:为什么repmat不一致?

library(matlab) 
a = matrix(1:4,2,2) 
repmat(a,3,1) 
    [,1] [,2] 
[1,] 1 2 
[2,] 3 4 
[3,] 1 2 
[4,] 3 4 
[5,] 1 2 
[6,] 3 4 

这是我所期望的。沿第一维复制三次。但是

b = matrix(1:6,2,3) 
b 
    [,1] [,2] [,3] 
[1,] 1 3 5 
[2,] 2 4 6 

repmat(b,3,1) 
     [,1] [,2] 
[1,] 1 2 
[2,] 3 4 
[3,] 5 6 
[4,] 1 2 
[5,] 3 4 
[6,] 5 6 
[7,] 1 2 
[8,] 3 4 
[9,] 5 6 

这是不一致的。我想

rbind(b,rbind(b,b)) 
    [,1] [,2] [,3] 
[1,] 1 3 5 
[2,] 2 4 6 
[3,] 1 3 5 
[4,] 2 4 6 
[5,] 1 3 5 
[6,] 2 4 6 
+1

之前,但不'A =矩阵(1:4,2,2)'给你的'[1〜3当量; 2 4]',所以功能是一致的。它只是首先转置:/所以要解决它,在调用内转置'a'和'b'到'repmat' – Dan 2013-05-03 13:46:07

+0

不一致的是,情况1矩阵沿着维度1,3复制。在情况2中这显然没有发生。我甚至不知道如何解释情况2. – 2013-05-03 13:48:52

+1

@FlorianOswald在这两种情况下,它看起来像转置矩阵,然后堆叠它几次... – Dason 2013-05-03 13:50:14

回答

3

它只是出现在做堆叠之前转置矩阵得到一个6×3矩阵的一个。你可以只转你的矩阵发送它变成repmat

> repmat(t(b), 3, 1) 
    [,1] [,2] [,3] 
[1,] 1 3 5 
[2,] 2 4 6 
[3,] 1 3 5 
[4,] 2 4 6 
[5,] 1 3 5 
[6,] 2 4 6 
+0

哈,你去。感谢那。这只是我还是这个违反直觉? – 2013-05-03 13:57:08

+0

我不使用matlab,所以我不知道它是如何做的。我猜这不是你期待的行为吗? – Dason 2013-05-03 13:59:33

+0

呃,根本没有期待。我只是不明白为什么作为一个用户,我应该首先转置矩阵。我想复制'b',而不是't(b)'。 – 2013-05-03 14:02:28

相关问题