根据向量填充矩阵

时间:2015-01-07 13:08:08

标签: arrays matlab matrix octave

在Octave中,我有一个带索引的向量,例如a = [ 1 2 3 1 2 3]。我现在想要一个矩阵m = zeros(size(a,2), max(a))来取决于向量a:

m =
[1 0 0
 0 1 0
 0 0 1
 1 0 0
 0 1 0
 0 0 1]

我该怎么做?

我试过这个,但它没有用:m(a,:) = 1;

2 个答案:

答案 0 :(得分:3)

假设:

a = [1 2 3 1 2 3];
sz = [numel(a), max(a)];

使用sub2ind

m = zeros(sz);
ind = sub2ind(sz, 1:sz(1), a);
m(ind) = 1;

使用sparse

m = full(sparse(1:sz(1), a, 1));

答案 1 :(得分:0)

你也可以索引到这样的单位矩阵。

a = [ 1 2 3 1 2 3];

I = eye(max(a));
m = I(a, :);