从m个大小的列索引向量创建m×n矩阵0和1

时间:2012-05-19 12:28:47

标签: matlab matrix octave

我有一个 m 维度的整数向量,范围从1到 n 。这些整数是 m×n 矩阵的列索引。

我想创建一个0和1的 m×n 矩阵,其中在 m -th行中,指定的列中有一个1 m - 我的载体中的值。

示例:

% 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循环吗?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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数组由列

处理

答案 2 :(得分:3)

在Octave中,至少从3.6.3开始,您可以使用广播轻松完成此操作:

M = v==1:4