2017-04-02 14 views
1

Sagen wir, ich habe einen 1 × n-dimensionalen Vektor mit Werten zwischen 0 - 9 wie folgt aus:, nullt Matrix in MATLAB

A = [4 3 7 9 0] 

ich dies zu einer NX10 Matrix konvertieren wollen, wie so:

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] 

wo alles Null ist, mit Ausnahme der Spalte in der i-ten Zeile durch das i-te Element in dem ursprünglichen Vektor a dargestellt

ich kann dies für die Schleife mit einem leicht tun:

012.

Aber gibt es eine vektorisierte Möglichkeit, dies ohne eine for-Schleife zu tun?

Antwort

1

können Sie verwenden bsxfun:

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

Oder sparse:

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

Verwendung 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