Это типичный пример, где вы можете использовать таблицу вместо матрицы.
A = [19260702 0.026 0.000 NaN 1.175
...
19260816 0.042 0.007 NaN 25.928];
% Matrix to table conversion
T = array2table(A,'VariableNames',{'DATE','S1','S2','S3','S4'});
% We add a new column "month"
T.MONTH = floor(T.DATE/100);
% varfun can apply a custom function to your table and group the result according
% to one (or more) variable(s)
Result = varfun(@sum,T,'InputVariables',{'S1','S2','S3','S4'},'GroupingVariables','MONTH')
Вариант Ленивый парень:
Если вы ленивы и не хотите вручную добавлять имя переменной, вы также можете использовать линейное индексирование:
T = array2table(A) %column name will be 'A1','A2',....
T.MONTH = floor(T{:,1}/100);
Result = varfun(@sum,T,'InputVariables',2:5,'GroupingVariables','MONTH')
Код гольф варианта
Если вам нравится короткий код, имя аргумента может быть сокращено. Например, если InputVariables
является единственным именем аргумента, начинающимся с I
, вы можете просто использовать I
вместо InputVariables
.
Result = varfun(@sum,T,'I',2:5,'G',6)