Nehmen wir an, ich habe einen Vektor mit dem Namen vect = [1 2 3 4 5 6 7 8 9]
und einen anderen Vektor mit dem Namen intervals = [1 3 6 9]
. Ist es möglich, einen weiteren Vektor von Teilsummen von Elementen in vest
mit intervals
zu erhalten? Ich möchte so etwas wie dies zu tun:Summe der Elemente in einem Vektor mit Intervallen
Teilsumme 1 = 1 + 2 + 3 (Elemente aus vect(1)
zu vect(3)
)
Teilsumme 2 = 4 + 5 + 6 (Elemente aus vect(3 + 1)
zu vect(6)
)
Teilsumme 3 = 7 + 8 + 9 (Elemente aus vect(6 + 1)
zu vect(9)
)
Also, was soll ich tun, ist die Summe der ersten k
Elemente zu erhalten, dann die Summe von weiteren k
Elementen starti ng von der ersten nicht in der vorherigen Summe usw.
Original-Problem: war das ursprüngliche Problem wie folgt aus: Ich erhalte einen Vektor mit n
Werten und einem Wert k
. Lass uns t = max(v)/k
Intervalle machen. Wie viele Werte von n
liegen nun im Intervall [0, t]? Was ist mit [t, t * 2)? Was ist mit [2 * t, 3 * t)? usw. Bisher habe ich accumarray(v, 1)
verwendet, um herauszufinden, wie viele Werte ich habe und int = (0:max(v)/k:max(v))
, um den Vektor der Invervale zu erstellen, aber jetzt muss ich sum(accumarray(v, 1))
in einer Weise, um diese Teilsummen zu erhalten.
Wenn Sie testen wollen, dies mit (http://pastebin.com/jCZ3qYhz: erzeugt mit accumarray
) und k = 16
, die Teilsummen müssen sein: 157, 167, 136, 251, 726, 1300, 1152..I'd gerne sein in der Lage, dies ohne eine for/while-Schleife zu tun :) Vektorisierung ist der Schlüssel!
Edit: Um meine erste Summe zu erhalten, verwende ich diese: sum(accumarray(v, 1)(1:16))
, für die zweite: sum(accumarray(v, 1)(17:32))
, aber ich weiß nicht, wie diese Operation vektorisieren. Ich habe das versucht: i = (1:16:500)
. Dann sum(accumarray(v, 1)(i(1:length(i)) : i(2:length(i)))
aber es funktioniert nicht wirklich oder ich benutze nicht das Richtige.
Übrigens habe ich eine andere Frage. Ich habe jetzt einen großen Vektor mit Dezimalzahlen und wie bisher einige Grenzen. Wie kann ich zählen, wie viele Werte in jedem Intervall enthalten sind? Acumarray scheint nicht mit Dezimalzahlen zu arbeiten, sondern nur mit positiven ganzen Zahlen. – Adi