# Mean of every n number of doubles in a cell

4 visualizzazioni (ultimi 30 giorni)
Adnan Habib il 28 Feb 2023
Commentato: Adnan Habib il 28 Feb 2023
I have a cell with 990 doubles of 300 by 300 matrices. Lets call it T
I want to create a new cell with 26 doubles of 300 by 300 matrices each of which are the mean values of every 39 doubles from T (the 26th double of the new cell will be the mean of the final 15 doubles of T). i.e. (39 X 25) + (15 X 1) = 990.
Kindly help me with the code for this.
##### 2 CommentiMostra 1 commento meno recenteNascondi 1 commento meno recente
Adnan Habib il 28 Feb 2023
Hi Dyuman Joshi, I want the first one 1-39, 40-78 etc.

Accedi per commentare.

### Risposta accettata

Jan il 28 Feb 2023
Modificato: Jan il 28 Feb 2023
I've reduced the test data size to 30x30 matrices - use the original sizes for your implementation:
T = squeeze(num2cell(rand(30, 30, 990), 1:2)); % Some test data, {990 x 1} cell
nT = numel(T);
R = cell(26, 1);
iR = 0;
for iT = 1:39:nT % Initial index of this block
fT = min(nT, iT + 38); % Final index of this block
tmp = 0;
for k = iT:fT % Accumulate elements of T
tmp = tmp + T{k};
end
iR = iR + 1; % Next output
R{iR} = tmp / (fT - iT + 1); % Mean value
end
Alternative approach:
nT = numel(T);
% Create [1, 40, 79, ...] with the last element is nT+1:
w = 39;
iT = 1:w:nT;
iT(end + (iT(end) == nT)) = nT + 1; % Consider nT is divisable by w
nR = numel(iT) - 1;
R2 = cell(nR, 1);
for iR = 1:nR
fT = iT(iR + 1) - 1; % Final index of this block
tmp = 0;
for k = iT(iR):fT % Accumulate elements of T
tmp = tmp + T{k};
end
R2{iR} = tmp / (fT - iT(iR) + 1); % Mean value
end
##### 1 CommentoMostra NessunoNascondi Nessuno
Adnan Habib il 28 Feb 2023
Thanks a lot Jan. The first one works. I didn't even try the alternative approach after that.

Accedi per commentare.

### Categorie

Scopri di più su Histograms in Help Center e File Exchange

### Community Treasure Hunt

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

Start Hunting!

Translated by