我正在使用Matlab學習「大型」數據集計算。我有一個txt文件,包括爲MTB所做的每筆交易。我的目標是將此刻度數據轉換爲日常數據。例如,在第一天,發生了超過15,000筆交易,我的prgm將這些數據轉換爲每天的開盤價,最高價,最低價,收盤價和總成交量。如何使用Matlab爲「大數據集」矢量化for循環
我的問題: 你能幫我讓代碼更快嗎? 您是否有任何實用的「技術」來驗證計算,因爲它們是在這樣大的數據集上進行的?
這花了我的PGM:20.7757秒 ,我發出以下警告。我真的不知道這意味着什麼 警告:對於單元陣列,'rows'標誌被忽略。
在cell.unique在32 在EX5在16 警告: '行' 標誌爲單元陣列忽略。 。在32 在EX5 cell.unique在17
%DESCRIPTION: Turn tick data into daily data
%INPUT: stock tick data(tradeDate,tradeTime,open,high,low,
%close,upVol,downVol)
%OUTPUT: openDay,highDay,lowDay,closeDay,volumeDay,netTransaction
%net transaction taded = sum (price*upVol -price*downVol)
clear;
startTime=tic;
%load data from MTB_db2
[tradeDate, tradeTime,open,high,low,close,upVol,downVol]=textread('MTB_db2.txt','%s %u %f %f %f %f %f %f','delimiter',',');
%begIdx:Index the first trade for the day from tick database and
%endIdx:index for the last trade for that day
[dailyDate begIdx]=unique(tradeDate,'rows','first');
[dailyDate2 endIdx]=unique(tradeDate,'rows','last');
%the number of daily elements, useful for the loop.
n=numel(dailyDate);
%initilize arrays
highDay=[];
lowDay=[];openDay=[];closeDay=[];
volumeDay=[];netTransaction=[];
priceChange(1)=NaN; mfChange(1)=NaN;
%loop: bottleneck is here!!
for j=1:n
openDay(j)=open(begIdx(j));
closeDay(j)=close(endIdx(j));
highDay(j)=max(high(begIdx(j):endIdx(j)));
lowDay(j)=min(low(begIdx(j):endIdx(j)));
volumeDay(j)=sum(upVol(begIdx(j):endIdx(j)))+sum(downVol(begIdx(j):endIdx(j)));
cumSum=0;
for i=begIdx(j):endIdx(j)
cumSum=cumSum+close(i)*(upVol(i)-downVol(i));
end
netTransaction(j)=cumSum;
end
elapsedTimeNonVectorized=toc(startTime)
它如果你發佈了代碼的_reproducible_版本(通過不使用外部文件)會更好。 –
我該怎麼做? – user1561949
替換行[[tradeDate,tradeTime,open,high,low,close,upVol,downVol] = textread('MTB_db2。txt','%s%u%f%f%f%f%f%f','delimiter',',');'帶有「虛擬」數據。或提供.txt示例文件 –