我有一个1118x1的矢量值,从0到10,如下:
5
5
3
4
7
4
1
。
。
我需要将每个值编码为11x1118零的矩阵,其中k + 1的值为1
例如,第一个值是5,因此第一列中的5 + 1 = 6值为1
0
0
0
0
0
1
0
0
0
0
0
我需要为1118之前的所有值执行此操作
我假设我只需要一个for循环,但我完全迷失了如何做到这一点
答案 0 :(得分:1)
您可以使用例如sub2ind
。请尝试以下代码:
x = [4;3;1;1;4;7];
y = zeros(11,numel(x));
y(sub2ind(size(y),x+1,(1:numel(x))')) = 1
y =
0 0 0 0 0 0
0 0 1 1 0 0
0 0 0 0 0 0
0 1 0 0 0 0
1 0 0 0 1 0
0 0 0 0 0 0
0 0 0 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 0 0
答案 1 :(得分:0)
使用循环的直接方法:
v = [5 5 3 4 7 4 1...]; # your vector
M = zeros(11, length(v)); # the final matrix
for i = 1:length(v)
e = v(i);
M(e + 1, i) = 1;
end