Сумма элементов в векторе с использованием интервалов

Допустим, у меня есть вектор с именем vect = [1 2 3 4 5 6 7 8 9] и еще один вектор с именем intervals = [1 3 6 9], Можно ли получить другой вектор частичных сумм элементов в vest, с помощью intervals? Я хочу сделать что-то вроде этого:

Частичная сумма 1 = 1 + 2 + 3 (элементы из vect(1) в vect(3))

Частичная сумма 2 = 4 + 5 + 6 (элементы из vect(3 + 1) в vect(6))

Частичная сумма 3 = 7 + 8 + 9 (элементы из vect(6 + 1) в vect(9))

Итак, что я хочу сделать, это получить сумму первого k элементы, то сумма другого k элементы, начиная с первого, а не в предыдущей сумме и т. д.

Исходная проблема: Первоначальная проблема была такой: я получаю вектор с n ценности и значение k, Давайте сделаем t = max(v) / k интервалы. Теперь, сколько значений из n находятся в интервале [0, t)? Как насчет [т, т * 2)? А как насчет [2 * т, 3 * т)? и т.д. До сих пор я пользовалась accumarray(v, 1) чтобы узнать, сколько значений у меня есть и int = (0:max(v)/k:max(v)) построить вектор инверсий, но теперь я должен sum(accumarray(v, 1)) таким образом, чтобы получить эти частичные суммы.

Если вы хотите проверить, используя это ( http://pastebin.com/jCZ3qYhz: генерируется с accumarray) а также k = 16частичные суммы должны быть: 157, 167, 136, 251, 726, 1300, 1152... Я бы хотел сделать это без цикла for/while:) Векторизация - это ключ!

Изменить: чтобы получить мою первую сумму, я использую это: sum(accumarray(v, 1)(1:16))для второго: sum(accumarray(v, 1)(17:32)), но я не знаю, как векторизовать эту операцию. Я попробовал это: i = (1:16:500), затем sum(accumarray(v, 1)(i(1:length(i)) : i(2:length(i))) но это на самом деле не работает, или я не правильно использую.

1 ответ

Решение

Для первой проблемы я бы использовал это:

cs = cumsum(vect);
i2 = intervals(2:end);
result = [cs(i2(1)), diff(cs(i2))]

result =

     6    15    24

Это позволит построить совокупную сумму всех элементов, найти концы частей, а затем найти различия между суммами в конце частей (которые в точности являются суммами промежуточных элементов).

Другие вопросы по тегам