2013-06-22 2 views
0

Если у меня есть столбец дат и соответствующий столбец данных тома, например:Matlab: Использование Accumarray

31,3 
31,2 
31,1 
31,5 
07,2 
07,3 
07,4 
07,2 
07,3 
07,5 
07,3 
07,1 
07,1 
07,2 
07,3 
30,5 
06,4 

Я хочу, чтобы сложить данные в правой колонке, для каждой даты. Если я использую накопитель следующим образом:

orgSumVinDay=accumarray(dayIdx,vv); 
k=orgSumVinDay==0; 
SumVininDay=orgSumVinDay; 
SumVinDay(k)=[] 

Это работает; Я получаю:

11 
29 
5 
4 

, который является правильным, потому что на 31-м, было 3+2+1+5=11 и т.д.

Однако, я хочу, чтобы получить столбец, показывающий кумулятивное добавление в течение каждого дня, так что она выглядит следующим образом:

3 
5 
6 
11 
2 
4 
9 
11 
14 
19 
22 
23 
24 
26 
29 
5 
4 

и я не уверен, как это достичь. Благодаря!

ответ

2

Не могу проверить это прямо сейчас, но я считаю, что вы должны это сделать с accumarray (..., [], @cumsum). Последний параметр заменит функцию по умолчанию sum на cumsum.

+0

Странный, 'tankarray (dayStr, minuteVolumes, [], @ cumsum)' дает ошибку «Функция cumsum» возвращает нескалярное значение ». Но если я использую другую функцию, например '@ max', результаты верны. – siegel

+0

Это работает! 'cell2mat (accumarray (dayStr, minuteVolumes, [], @ (x) {cumsum (x)}));' Спасибо! – siegel

 Смежные вопросы

  • Нет связанных вопросов^_^