How to Add Multiple Arrays?

4 次查看(过去 30 天)
I am new to matlab. I want to do the following: I had created nine arrays and gave each one a name from A to I, said: A,B,C,D,E,F,G,H,I. Once I done that what I want to do is add them in groups of three and put to each new array the name of the last array added. For example. array C=A+B+C, array F=D+E+F, array I=G+H+I, I want to do this using a for loop which I think will be the most practical way of do it.
Thank you

采纳的回答

Oleg Komarov
Oleg Komarov 2011-3-19
If you could know how many matrices you have in advance (num), then preallocate before the loop:
dir1='C:\Documents and Settings\ann\My Documents\MATLAB\AMSR-E';
A = zeros(586,1383,num);
c = 1;
for year=2010:2010
for month=10:12
for day=1:eomday(year,month)
dd = [num2str(year),'.',num2str(month,'%0.2d'),...
'.',num2str(day,'%0.2d')];
file1 = ls([dir1,'\',dd,'\*.hdf']);
A(:,:,c) = hdfread([dir1,'\',dd,'\',file1],...
'Ascending_Land_Grid',...
'Fields', 'A_Veg_Water_Content');
% Increase counter
c = c+1;
end
end
end
You'll end up with a 3d array.
EDIT
Then to consolidate as Sean suggested use sum(A,3) in a loop:
A = rand(586,1383,8);
% Number of days to consolidate each time
n = 3;
% Final amount of slices
sl = ceil(size(A,3)/n);
% Preallocate
B = zeros(586,1383,sl);
for s = 1:sl-1
B(:,:,s) = sum(A(:,:, (s-1)*n+1:s*n ), 3);
end
% Final slice can be the result of less than 3 days
B(:,:,s+1) = sum(A(:,:,s*n+1:end),3);
Oleg
  3 个评论
Doralee
Doralee 2011-3-19
Oleg,
THANK YOU!
I will implement this solution, I think it will work.
Thank you for your time I really appreciated.
Oleg Komarov
Oleg Komarov 2011-3-19
If you have NaNs then you should consider how to treat them, otherways they'll propagate causing loss of info.

请先登录,再进行评论。

更多回答(2 个)

Andrew Newell
Andrew Newell 2011-3-19
It's not clear to me why you want loops. As long as the arrays are the same size, you can just enter the equations the way you wrote them above, e.g.,
C = A+B+C
and it will work.
  9 个评论
Doralee
Doralee 2011-3-19
I am really new to matlab and don't know how to manage all the functions, Satellite data is stored in HDF format. matlab has a function to read satellite data format that function is hdfread. here is the code I wrote for extract the data from the original files:
dir1='C:\Documents and Settings\ann\My Documents\MATLAB\AMSR-E';
for year=2010:2010
for month=10:12
for day=1:eomday(year,month)
dd = [num2str(year),'.',num2str(month,'%0.2d'),'.',num2str(day,'%0.2d')];
file1 = ls([dir1,'\',dd,'\*.hdf']);
A = hdfread([dir1,'\',dd,'\',file1], 'Ascending_Land_Grid', 'Fields', 'A_Veg_Water_Content');
eval(['Data_Ascending_' num2str(year), num2str(month,'%0.2d'),num2str(day,'%0.2d') '=A']);
end
end
end
Doralee
Doralee 2011-3-19
Oleg Komarov,
Thank you for your answer. How do I do that? could you give me an example?
Thank you a lot!

请先登录,再进行评论。


Sean de Wolski
Sean de Wolski 2011-3-19
  2 个评论
Doralee
Doralee 2011-3-19
Sean de,
Thank you for your answer.I just read about functions cat and sum, but for example once I applied cat function how do I make matlab understand that I want to add columns alternatively.
thank you
Matt Tearle
Matt Tearle 2011-3-19
When you say "alternatively", do you mean "columns rather than rows" or "alternating columns"?
Former: sum(A,2)
Latter: sum(A(:,1:2:end))

请先登录,再进行评论。

类别

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

Community Treasure Hunt

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

Start Hunting!

Translated by