【问题标题】:Turn Vector Into ones, zeros matrix in MATLAB [duplicate]在MATLAB中将向量变成一个,零矩阵[重复]
【发布时间】:2017-08-27 11:37:31
【问题描述】:

假设我有一个 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 循环的情况下做到这一点?

【问题讨论】:

    标签: matlab


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      你可以使用bsxfun:

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

      sparse:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-12
        • 2022-10-14
        • 2012-12-11
        • 1970-01-01
        • 2021-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多