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

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?

0 Comments

Locks

Tags

Products

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];

0 Comments

Image Analyst
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]) ;
 end

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(:)]) ;

10 Comments

Cedric Wannaz on 8 Apr 2013

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.date,ld.r]) ;
 end
Locks on 8 Apr 2013

great, that seems to work, thanks!

Locks 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

Cedric Wannaz

Contact us