在MATLAB中将Vector转换为1,零点矩阵

时间:2017-04-02 16:07:24

标签: matlab

假设我有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循环的情况下执行此操作吗?

2 个答案:

答案 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)

您可以使用bsxfun

result = double(bsxfun(@eq, A(:)+1, 1:max(A)+1));

sparse

result = full(sparse(1:numel(A), A+1, 1));