Sum values on the maximum number of consecutive days

4 vues (au cours des 30 derniers jours)
Eli
Eli le 26 Juin 2023
Dear all,
I want to accomplish the following:
  1. I have a variable (R_3) with the daily data for 1 year (matrix size is 366 rows, 1 column).
  2. Implement a condition of daily data > 1.
  3. For the days that satisfy (2), get the maximum number of consecutive days and the corresponding row number.
  4. Sum the values according to the row number.
  5. In R_3, the maximum number of consecutive days is 6 days and this would be rows 106 to 111. I want to sum the values in rows 106 to 111.
I have attached my code below. I have trouble with steps 3 & 4 and do not know how to proceed.
clear; clc;
load('Sample.mat');
a1 = find(R_3 > 1); % Condition R_3 > 1
a2 = diff(a1);
a3 = diff([0; find(diff(a2)); numel(a2)]);
a4 = max(a3)+1; % Max number of consecutive days

Réponses (2)

KSSV
KSSV le 26 Juin 2023
load Sample.mat ;
R_3 = R_3' ;
n = 1:length(R_3) ;
ii = zeros(size(R_3));
jj = R_3 > 1 ;
ii(strfind([0,jj(:)'],[0 1])) = 1;
idx = cumsum(ii).*jj;
out = accumarray( idx(jj)',R_3(jj)',[],@(x){x'}); % gives the values seperated in cell
out_ind = accumarray( idx(jj)',n(jj)',[],@(x){x'}); % gives the indices seperated in cell

Image Analyst
Image Analyst le 26 Juin 2023
Try this (requires the Image Processing Toolbox);
% I have a variable (R_3) with the daily data for 1 year (matrix size is 366 rows, 1 column).
load('Sample.mat');
% Implement a condition of daily data > 1.
a1 = R_3 > 1; % Condition R_3 > 1
% For the days that satisfy (2), get the maximum number of consecutive days and the corresponding row number.
props = regionprops(a1, 'Area', 'PixelIdxList')
props = 42×1 struct array with fields:
Area PixelIdxList
allLengths = [props.Area];
[maxLength, index] = max(allLengths)
maxLength = 6
index = 11
% Sum the values according to the row number.
% In R_3, the maximum number of consecutive days is 6 days and this would be rows 106 to 111.
indexes = props(index).PixelIdxList
indexes = 6×1
106 107 108 109 110 111
% I want to sum the values in rows 106 to 111.
theSum = sum(R_3(indexes))
theSum = 97.5360

Catégories

En savoir plus sur Matrices and Arrays dans Help Center et File Exchange

Produits


Version

R2022a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by