2012-06-21 113 views
0

我有矩陣(a)(1:10),< 10 x 1> double。我想複製這些值並將它們重新排列爲另一個矩陣var。 (b)中。見下面的例子。而且,在這項任務中哪種方法最有效?矩陣的高效複製

matrix a matrix b 

1   1 
2   2 2 
3   3 3 3 
4   4 4 4 4 
5   5 5 5 5 5 
6   6 6 6 6 6 6 
7   7 7 7 7 7 7 7 
8   8 8 8 8 8 8 8 8 
9   9 9 9 9 9 9 9 9 9 
10   10 10 10 10 10 10 10 10 10 10 

更新: 嗨,再次Amro。如果我想定義要複製哪些值,那麼如何?見下面的例子:

matrix a matrix b 
column:  1 2 3 4 5 6 7 

1   1 
2   2 2 
3    3 3 
4     4 
5      5 
6      6  
7      7 
8      8  
9       9 
10       10 10 

回答

2

嘗試:

>> a = (1:10)' 
a = 
    1 
    2 
    3 
    4 
    5 
    6 
    7 
    8 
    9 
    10 

>> b = tril(repmat(a,1,10)) 
b = 
    1  0  0  0  0  0  0  0  0  0 
    2  2  0  0  0  0  0  0  0  0 
    3  3  3  0  0  0  0  0  0  0 
    4  4  4  4  0  0  0  0  0  0 
    5  5  5  5  5  0  0  0  0  0 
    6  6  6  6  6  6  0  0  0  0 
    7  7  7  7  7  7  7  0  0  0 
    8  8  8  8  8  8  8  8  0  0 
    9  9  9  9  9  9  9  9  9  0 
    10 10 10 10 10 10 10 10 10 10 
+0

你好,你可以看看我更新的查詢。 – Buntalan

+0

@BernardUntalanJr .:恐怕你的新規格不完整。你如何定義哪些值被複制? – Amro

+0

我犯了一個asinine錯誤。無論如何,user1434725提供了一個解決方案。感謝您解決我的問題的第一部分。 – Buntalan

1

我想在你指定你犯了一個錯誤的第二矩陣。我假設你想要做這樣的事情:

b = 

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

這是簡單的事:

%define vector of arbitrary length 
a=1:6; 
%generate b with shifted diagonal matrices 
b=diag(a)+diag(a(2:end),-1); 

診斷的第二個參數只是轉移所產生的對角線。

+0

確實我無意中犯了一個錯誤。謝謝你的回答! – Buntalan