vectorization for nested loop where inner loop is variable depending on value of element in outer loop
Show older comments
Hello,
I just learned about vectorization after trying to find a faster way to loop through all the sheets of all the files I need.
Here is basically what I'm trying to do:
for k = 1:arrayOfAllMyFilePaths
%get filepath at k
%get number of sheets in file using filepath
for m = 1:lengthOfNumberOfSheetsInFile
%read some data in each sheet
7 Comments
Bob Thompson
on 1 Aug 2018
What exactly are you looking for help with? Can you post the code you have already? Have you run into any errors (post those as well if you have)?
The process you're looking to implement is definitely doable, I just want to make sure I am answering your actual question, rather than something you have already figured out on your own.
Stephanie M
on 1 Aug 2018
Edited: Stephanie M
on 1 Aug 2018
Stephanie M
on 1 Aug 2018
Bob Thompson
on 1 Aug 2018
I suspect part of the slowness is due to the fact that you are using xlsread within the nested loops. Each time you use xlsread MATLAB opens excel, opens the file, extracts the data, closes the file, and closes excel.
Unfortunately, the only way I know of getting around this is to use the Actxserver(COM) capability. COM will allow you to open excel once, open a document once, and then read all the data you need from the sheets before closing the document once and opening the next. COM has a whole different set of commands though that can be a bit difficult to track down.
I found this to get you started: https://www.mathworks.com/matlabcentral/answers/16299-is-there-instead-solution-of-xlsread
Stephanie M
on 2 Aug 2018
Edited: Stephanie M
on 2 Aug 2018
Is there a requirement to vectorize this? Not everything should be vectorized or can be vectorized. Mathworks did improve their for loop speeds, and the bottleneck is probably hard drive read speed, as opposed to CPU for calculations (which is what vectorization takes advantage of). For reading files, for loop is good.
"MATLAB® is optimized for operations involving matrices and vectors. The process of revising loop-based, scalar-oriented code to use MATLAB matrix and vector operations is called vectorization."
Stephanie M
on 2 Aug 2018
Answers (0)
Categories
Find more on Loops and Conditional Statements 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!