loop through each row of data and insert data back & how to preallocate

I am returning about 13000 records from the db and then looping through each row to apply the bndprice and accrbond function. Then I am inserting back the 13000 rows. Question:
1) How do I preallocate the monthlyTotals cell array? w/o preallocating, it's taking about 10mins to calculate.
2) Is this the most efficient way of doing this (looping through record set and inserting results back?)
curs = fetch(curs);
[rows,cols]=size(curs.Data);
for i = 1:rows
price = bndprice( [curs.Data{i,2}], [curs.Data{i,3}], [curs.Data{i,5}], [curs.Data{i,6}], 'Basis', 1, 'DiscountBasis',1);
acc = acrubond([curs.Data{i,4}], [curs.Data{i,5}], [curs.Data{i,4}], 100, [curs.Data{i,3}], 2, 1);
trans = [curs.Data{i,1}];
% adds rows to monthlyTotals
monthlyTotals(i,:)=num2cell([price,acc,trans]);
end
colNames{1,1} = 'AmortizedCost';
colNames{1,2} = 'AccruedInterest';
colNames{1,3} = 'TransactionsId';
insert(conn,'DailyAccruedIncome',colNames,monthlyTotals)

Answers (1)

To pre-allocate, do this after you get the size:
monthlyTotals=cell(rows,1)
Then to do the assignment,
monthlyTotals(i)={[price,acc,trans]}
All the other places where you have [curs.Data{i,2}], [curs.Data{i,3}], you don't need the square bracket. That might save you some time too.

Asked:

apl
on 18 Nov 2011

Community Treasure Hunt

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

Start Hunting!