2017-01-12 1 views
0

Angenommen I eine 2 um 5 Matrix haben:Matlab Matrix Indexierungs sowohl mit Spalten- und Zeilen

d1= 3  3  1  1  2 
    4  4  2  3  4 

und es gibt eine 4 um 5 Nullmatrix:

z1= 0  0  0  0  0 
    0  0  0  0  0 
    0  0  0  0  0 
    0  0  0  0  0 

Jede Spalte von d1 zeigt die Positionen von 1en in der entsprechenden Spalte in z1. Insbesondere möchte ich mich wie ein Ergebnis erhalten:

r1= 0  0  1  1  0 
    0  0  1  0  1 
    1  1  0  1  0 
    1  1  0  0  1 

ich für eine effiziente Art und Weise suchen r1 von d1 und z1 zu erhalten.

+0

ich nicht, wie man die dritte Matrix erhalten. Lesen Sie auch [ask], da es sich bei Stack Overflow nicht um einen Code-Schreibdienst handelt. Bitte bearbeite die Frage mit dem Code, den du selbst versucht hast, was ein [mcve] ist. – Adriaan

Antwort

3

Convert d1 zu linearen Indizes, und verwenden Sie sie indizieren z1:

% Prior to R2016b: 
I = bsxfun(@plus, d1, (0:size(d1,2)-1) * size(z1,1)); 

% On or after R2016b: 
I = d1 + (0:size(d1,2)-1) * size(z1,1)); 

% Index using the linearized indices 
z1(I) = 1 
+0

Funktioniert wie ein Charme! schätzen Sie es –

+0

Schöne Vermeidung 'sub2ind' –

Verwandte Themen