将数字转换为矢量八度/ matlab

Pon*_*oni 2 matlab matrix octave matrix-multiplication

我有一个矢量 y = [0; 2; 4]

我想将它的每个元素转换为向量,其中所有元素都为零,但索引等于数字的元素为1.

我想在没有循环的情况下这样做.

例如[0; 2; 4]应该转换为

[1 0 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]
Run Code Online (Sandbox Code Playgroud)

(在此示例中,向量第一个索引为0)

Lui*_*ndo 6

通常的技巧sparse可用于简化过程.设n表示所需的列数.然后

result = full(sparse(1:numel(y), y+1, 1, numel(y), n));
Run Code Online (Sandbox Code Playgroud)

例如,y = [0;2;4]10产生

result =
     1     0     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
Run Code Online (Sandbox Code Playgroud)