Averaging multiple cells element by element

1 次查看(过去 30 天)
I have 7 cells (named 'npsoutOrg1'...'npsoutOrg7'), each with a dimension of 5*1 cells. I want to take the average of each position across all 7 cells element by element and have the input stored in a 5*1 cell named 'npsoutOrgaverage'. How do I do that?
I tried first adding element by element with cell fun, but it would only allow 2 cells to be added at one time.
npsoutOrgAVG{1}=cellfun(@plus,npsoutOrg1{1},npsoutOrg2{1},'Un',0);
instead of
npsoutOrgAVG{1}=cellfun(@plus,npsoutOrg1{1},npsoutOrg2{1},...npsoutOrg7{1},'Un',0);
Plus, if this works, I still have to do it individuall for npsOutOrgAvg{2}... to npsOutOrgAvg{5}. Is there a faster way to average elements in the same position of the cells?
Not sure if this is of importance, but here's what each cell looks like:
%ROI 7: (207:267,23:83)
npsoutOrg7=cell(5,1);
for i = 39:141
[nps,f,nps2,fx,fy] = nps2d(im{i}(207:267,23:83),0.7813);
npsoutOrg7{1}{end+1} = nps;
npsoutOrg7{2}{end+1} = f;
npsoutOrg7{3}{end+1} = nps2;
npsoutOrg7{4}{end+1} = fx;
npsoutOrg7{5}{end+1} = fy;
end
Thanks so much!
  5 个评论
Brian
Brian 2015-10-6
I think I am getting the basic idea of what you mean by 3D array - so instead of having npsoutOrg1 to npsoutOrg7, there should just be one variable npsoutOrg? How would I actually carry it out? The tricky part is that each computation is based on a different set of coordinates...
Stephen23
Stephen23 2015-10-6
How to carry it out: use an internet search engine to research these topics:
  • Matrix indexing
  • Code vectorization
  • Array preallocation
  • Array indexing or multidimensional indexing

请先登录,再进行评论。

回答(1 个)

Joseph Cheng
Joseph Cheng 2015-10-6
编辑:Joseph Cheng 2015-10-6
% my code to create dummy data
x = randi(10,5,7);
npsoutOrgN = mat2cell(x,5,ones(1,7));
%put all into an array
%npsoutOrgN = [npsoutOrg1 npsoutOrg2 .... npsoutOrg3];
npsSum = zeros(5,1);
for ind = 1:7
npsSum = npsSum +npsoutOrgN{ind};
end
npsAve= npsSum/7
or... bypass the for loop and convert npsoutOrgN into an array and use mean()
  2 个评论
Brian
Brian 2015-10-6
Thanks for the comment, but I am still getting "Undefined function 'plus' for input arguments of type 'cell'." I think this is because my data is a cell within a cell?
Joseph Cheng
Joseph Cheng 2015-10-7
does your data look like ex in the dummy code below?
for ind = 1:5
for jind = 1:5
ex{ind,jind} = {randi(10,1,2)};
end
end

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Matrix Indexing 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by