2017-07-29 88 views
-1

我試圖實現MATLAB以下八度命令:相當於MATLAB的倍頻命令

M = eye(x)(y,:); 

x只是一個數字(在我的例子10)和y是一個向量(這裏8X1) :

y = [1 3 4 5 7 10 9 10]; 

的倍頻命令將產生:

M = 

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

這些人保持非常接近對角線。

我帶着MATLAB最近的是用下面的命令:

n = size(y,1); 
Y = eye(n, x); 

但它會產生什麼仍然是不同的。如果行和列之間的差異變大,則會有很大的不同。

M = 

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

我怎樣才能得到MATLAB的第一個矩陣?

+1

您的第一個M數組的第6行很尷尬......您確認了嗎? – Ratbert

+4

你不能像MATLAB那樣鏈接索引,你必須把'eye(x)'放在一個臨時變量中。 – beaker

+0

你能舉個例子嗎,燒杯? –

回答

0

首先你應該找到這個表達式eye(x)(y,:)的含義。首先創建一個大小爲x的標識矩陣x,然後選擇索引爲y的行。因此,等效語法是:

E = eye(x); 
M = E(y,:);