2012-05-19 34 views
5

我有一个m整数的维向量,范围从1到n。这些整数是m×n矩阵的列索引。从列索引的m大小的向量中创建0和1的m乘n矩阵

我想创建一个米×n的矩阵 0和1组成,其中在 -th行有在通过在我的矢量个值指定的列是一个1。

例子:

% my vector (3-dimensional, values from 1 to 4): 
v = [4; 
    1; 
    2]; 

% corresponding 3 × 4 matrix 
M = [0 0 0 1; 
    1 0 0 0; 
    0 1 0 0]; 

这是可能没有一个for循环?

回答

4

当然,这就是为什么他们发明sparse矩阵:

>> M = sparse(1:length(v),v,ones(length(v),1)) 
M = 

    (2,1)  1 
    (3,2)  1 
    (1,4)  1 

它,如果你想与full可以转换为全矩阵:

>> full(M) 
ans = 

    0  0  0  1 
    1  0  0  0 
    0  1  0  0 
3

或者不稀疏矩阵:

>> M = zeros(max(v),length(v)); 
>> M(v'+[0:size(M,2)-1]*size(M,1)) = 1; 
>> M = M' 

M = 

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

使用换位是因为在matlab数组中按列

3

在倍频得到解决,至少为3.6.3,你可以做到这一点很容易地使用广播:

M = v==1:4 
相关问题