说我有一个向量y
喜欢
2
4
3
10
我希望获得像
这样的矩阵0 1 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1
在octave / matlab中执行此操作的最简单/最干净/“最佳”方法是什么?我提出了:
repmat(y, 1, 10) == repmat(1:10, 4, 1)
任何人都有比这更好的方法吗?考虑到它之后对我来说很有意义,但我觉得解读代码的人有点难以解析(尽管idk,我对矢量化相对较新,而且很多矢量化代码对我来说都是这样)。
答案 0 :(得分:4)
如果您希望结果为sparse
,则可以
n = numel( y ); % number of rows in resulting matrix
k = max(y(:)); % if you do not know k (num of columns) in advance
U = sparse( 1:n, y, 1, n, k );
如果您希望结果是完整矩阵
U = zeros( n, k );
U( sub2ind([n k], 1:n, y ) ) = 1;