假设我有1xn维度向量,其值介于0到9之间,如下所示:
A = [4 3 7 9 0]
我想将其转换为nx10矩阵,如下所示:
A = [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 1 0 0
0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0]
除了原始向量A中由第i个元素表示的第i行中的列外,其余都为零。
我可以使用for循环轻松完成此操作:
newA = zeros(n,10);
for (i = 1:n)
newA(i,A(i)) = 1;
end
A = newA;
但是有一种矢量化方法可以在没有for循环的情况下执行此操作吗?
答案 0 :(得分:1)
使用sub2ind
:
A = [4 3 7 9 0];
colIdx = A + 1; % indexing in matlab starts from 1
rowIdx = 1:length(A);
nRows = length(A);
nCols = max(colIdx);
B = zeros(nRows,nCols);
B(sub2ind([nRows nCols],rowIdx,colIdx)) = 1
答案 1 :(得分:1)