Ich möchte die Anzahl der Spalten in einer Matrix zeilenweise reduzieren, indem Sie abhängig von einem für jede Zeile angegebenen Spaltenindex eine Aktion ausführen. Angesichts die folgende Beispiel Daten:Effiziente Möglichkeit, jede Zeile einer Matrix basierend auf einem Spaltenindex für jede Zeile zu reduzieren
M = magic(4);
col_ind = [1; 3; 2; 4];
Ich möchte eine drei Säulenmatrix machen, so dass die erste Spalte enthält die Zeilensumme jeder Reihe bis zum angegebenen Spaltenindex enthält die zweite Spalte den Wert des M
in dieser Reihe, von dem Spaltenindex angegeben, und die letzte Spalte enthält die Reihensumme des Restes der Einträge in dieser Reihe, das heißt, erzeugt die Matrix M_out
:
M_out = nan(4,3);
for i = 1:4
M_out(i, :) = [sum(M(i, 1:col_ind(i)-1), 2), ...
M(i, col_ind(i)), sum(M(i, col_ind(i)+1:end), 2)];
end
so dass:
>> M_out
M_out =
0 16 18
16 10 8
9 7 18
33 1 0
Check out 'tril',' diag', 'cumsum' und' bsxfun'. –
Ah ja, ich sehe, wie ich Cumsum über Reihen mit linearer Indexierung verwenden könnte. – Alex