How to take mean of 3D matrices without storing them

조회 수: 1 (최근 30일)
nlm
nlm 2021년 5월 27일
댓글: Jonas 2021년 5월 28일
Hi,
I have 31 matrixes of 18000 by 36000 double type. The memory doesn't allow me to store more than 3 matrixes at once to take mean.
How can I take the mean of 31 matrixes without storing them ?
all = [];
for KK = 1:31
all = cat(3,all,data);
end
all_mean = nanmean(all,3);

채택된 답변

Walter Roberson
Walter Roberson 2021년 5월 28일
%assuming that your data is currently in a cell array
total = zeros(size(data{1}));
validcounts = total;
for KK = 1:length(data)
mat = data{K};
mask = isnan(mat);
validcounts = validcounts + ~mask;
mat(mask) = 0;
total = total + mat;
end
all_mean = total ./ validcounts;
Note: any location that was nan in all the matrices will be nan in all_mean.

추가 답변 (1개)

Jonas
Jonas 2021년 5월 27일
sum them up one by one, this way you have one big summing matrix and the current loaded matrix. after summing you can divide all matrix elements by 31. if there really exist NaN in your matrix you have to create a third big matrix which counts for each entry if the value was NaN or not which results into a matrix with highest value 31 (at the end you then divide element wise by that matrix instead of all elements through 31). at the same time you have to set NaN entries to 0 before you add them
  댓글 수: 2
nlm
nlm 2021년 5월 27일
using a for loop ?
Jonas
Jonas 2021년 5월 28일
just like in the answer of Walter. only his assumption that all data is on a cell array may be wrong because you said you could not have more than 3 matrices in your workspace. depending on how you access your data you have to load maybe one file after the other and remove previously loaded data

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Matrices and Arrays에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by