joining two arrays to make a longer one
Show older comments
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?
Accepted Answer
More Answers (1)
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
Locks
on 7 Apr 2013
Cedric
on 7 Apr 2013
You should go for a solution around the following example:
years = 2002:2003 ;
data = [] ;
for yId = 1 : numel(years)
fname = sprintf('SPX_%d.mat', years(yId)) ;
load(fname) ;
data = vertcat(data, [F,K,PC,Price,T,VIX,date,r]) ;
end
Locks
on 7 Apr 2013
Cedric
on 7 Apr 2013
It is added in the array data, the other variables K, etc being just temporary variables. This code provides you directly with the array data that you have been using in your other questions.
Locks
on 7 Apr 2013
If you run
clear all
exampleFile1 = 'SPX_2002.mat' ;
load(exampleFile1) ;
whos
is there a variable named data? If so, rename the variable data from my example into e.g. allData.
If you want to understand the principle, try/understand the following:
data = [] ;
for k = 1 : 5
data = vertcat(data, rand(2,3)) ;
end
size(data)
and you will see that it works.
Locks
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
Categories
Find more on MATLAB in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!