2017-05-11 1 views
1

Ich versuche, eine for-Schleife zu vektorisieren, die einen Vektor zu einem Index summiert, der von einem anderen Vektor definiert wird. Es gibt eine große Anzahl von Vektoren zu summieren. Dies geschieht leicht in einer for-Schleife, aber vielleicht nicht in einer vektorisierten Art und Weise für mich.Summierung von Zeilen zu beliebigen Spalten in Matlab

Ein Zufall Beispiel wäre:

t = rand (10, 5);

c = Randi ([1 5], 1, 10);

Grundsätzlich muss ich jetzt über jede Zeile summieren, bis die entsprechende Spalte durch den gleichen Index von c wie aktuelle Zeile t gegeben ist. Der Rückgabewert wäre ein Vektor der Zeilensumme zu seiner jeweiligen Spalte c (i). Ich habe so viele Manipulationen an der Summenfunktion untersucht, dass ich mir vorstellen kann, aber keine erreicht das Endergebnis.

Irgendwelche Ratschläge?

Antwort

1

Eine Möglichkeit, das zu tun ist bsxfun eine Maske des Wertes zu erstellen, die Sie in jeder Zeile Summe enthalten sein sollen:

result = sum(t .* bsxfun(@le, 1:size(t,2), c(:)), 2); 

In Matlab R2016b oder neuer können Sie implicit expansion statt bsxfun verwenden:

result = sum(t .* (1:size(t,2) <= c(:)), 2) 
Verwandte Themen