2017-07-29 86 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,:);