根据向量用 1 填充矩阵

Filling matrix with ones depending on vector

在 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;

假设:

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));

您也可以像这样索引到单位矩阵。

a = [ 1 2 3 1 2 3];

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