2013-05-03 60 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