2012-06-03 150 views
3

我需要一個nxn的矩陣,其中第一個pxp包含1,其餘爲零。我可以通過遍歷單元格來完成它,所以我不會要求這樣做。我在尋找的「MATLAB方式」來做到這一點,使用內置的功能,避免循環等。MATLAB用零擴展矩陣

更清晰;

n=4 and p=2

那麼預期的結果是:

1 1 0 0 
1 1 0 0 
0 0 0 0 
0 0 0 0 

有可能不止一個優雅的解決方案做到這一點,所以我會接受的最短和最可讀的一個答案。

P.S.問題標題看起來有點不相關:我把這個標題,因爲我最初的方法將創建一個pxp矩陣與然後擴展到nxn與零。

回答

9

答案是創建零矩陣,然後使用索引設置的一部分來1

例如:

n = 4; 
p = 2; 
x = zeros(n,n); 
x(1:p,1:p) = 1; 

如果你堅持擴大,您可以使用:

padarray(zeros(p,p)+1 , [n-p n-p], 0, 'post') 
+0

'padarray(個(P,P),[NP NP],0, '後')'也工作,謝謝你教我'padarray'功能。 –

+0

注意:'padarray'需要圖像處理工具箱。 – rayryeng

2

您可以通過水平和垂直連接方便地創建矩陣:

n = 4; 
p = 2; 
MyMatrix = [ ones(p), zeros(p, n-p); zeros(n-p, n) ]; 
6

的另一種方法與擴大矩陣:

>> p = 2; n = 4; 
>> M = ones(p,p) 
M = 
    1  1 
    1  1 
>> M(n,n) = 0 
M = 
    1  1  0  0 
    1  1  0  0 
    0  0  0  0 
    0  0  0  0 
+0

喜歡帶索引的後期分配技巧。 +1。 – rayryeng

1
>> p = 2; n = 4; 
>> a = [ones(p, 1); zeros(n - p, 1)] 

a = 

    1 
    1 
    0 
    0 

>> A = a * a' 

A = 

    1  1  0  0 
    1  1  0  0 
    0  0  0  0 
    0  0  0  0