MATLAB Answers


joining two arrays to make a longer one

Asked by Locks
on 7 Apr 2013

If I have two arrays, lets say the first is called a and the second is called b, I am aware of the fact that I can combine them with the command A=[a;b] to get a longer array

the problem I have got now is the following: I have two matlab files (let's say the first one is year 2002 and the second one from year 2003) which are saved in my computer and wich I would like to load, what is no big deal. Ich matlab file consist of 8 vectors which are called F,K,PC,Price,T,VIX,date,r

loading this is no problem, but as soon as I an loading both files, because the arrays in the files have the same name, the second file is overwriting the first one is there a way to write a code in a script which loads both files and combines them the way I mentionned above without overwriting the first file?




No products are associated with this question.

2 Answers

Answer by Image Analyst
on 7 Apr 2013
 Accepted answer

You aren't using load correctly. You need to load each into its own structure

storedStructure1 = load(filename1);
storedStructure2 = load(filename2);
% Get theResults (or whatever)  from each
theResults1 = storedStructure1.theResults;
theResults2 = storedStructure2.theResults;
% Concatenate
theResults = [theResults1; theResults2];


Answer by Cedric Wannaz
on 7 Apr 2013
Edited by Cedric Wannaz
on 7 Apr 2013

If all vectors are column vectors, do the following:

 data = [] ;
 for f = 1 : nFiles
     % Load file f:
     % ... whatever you are doing to load the file.
     % CAT to data array:
     data = vertcat(data, [F,K,PC,Price,T,VIX,date,r]) ;

if these are row vectors, just transpose them. If it is a mix and you don't want to investigate, just read them linearly ( => column ):

 data = vertcat(data, [F(:),K(:),PC(:),Price(:),T(:),VIX(:),date(:),r(:)]) ;


I know that these are the same names, this is why I proposed to use them as temporary/intermediary variables and to build data directly in the loop. This way you have data defined as a concatenation of all relevant variables after the loop, and you can discard K, F, etc. If you kept the line

 data = [F,K,PC,Price,T,date,r];

after the loop, this is the reason why you had only the last block of data previously (because this line overwrites the array data that is built in the loop).

However, even in this situation, Image Analyst's remark is right and I should have proposed the following that is cleaner:

 years = 2002:2003 ;
 data  = [] ;
 for yId = 1 : numel(years)
    fname = sprintf('SPX_%d.mat', years(yId)) ;
    ld = load(fname) ;
    data = vertcat(data, [ld.K,ld.F,ld.PC,ld.Price,ld.T,,ld.r]) ;
on 8 Apr 2013

great, that seems to work, thanks!

on 8 Apr 2013

What I still do not reallly understand is how that is working, or in other words which element is allowing me to load the data without overwriting them, could you explain that to me? Is seems as 2002 is stored in ld, but I do not get what ld is and how it's done then

Join the 15-year community celebration.

Play games and win prizes!

Learn more
Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

MATLAB Academy

New to MATLAB?

Learn MATLAB today!