Hi,
I have a large dataset where I calculate the value of some result in each row based on data in preceding rows. Currently it is taking too long due to the large data. I have included a simplified example below. Can this be converted to a vector operation? Alternatively and less preferably can this be done in parallel? Thank you.
MATLAB codedataset=table();dataset.assetname=[{'st1'};{'st1'};{'st1'};{'st2'};{'st2'}];dataset.time=[1;2;5;2;3];dataset.price=[1.1;1.2;1.1;2.1;2.2];dataset.quantity=[10;15;5;20;25];dataset.ordertype=[{'buy'};{'buy'};{'sell'};{'buy'};{'sell'}];dataset.last_buy_quantity_price_x=repmat(NaN,height(dataset),1);price_x=1.1;for row=1:height(dataset) filteredrows=strcmp(dataset.assetname(row),dataset.assetname) & dataset.time(row) >=dataset.time; lastrow=max(find(dataset.price(filteredrows)==price_x & strcmp(dataset.ordertype(filteredrows),'buy'))); if isempty(lastrow) tempvar=0; else tempvar=dataset.quantity(lastrow); end dataset.last_buy_quantity_price_x(row)=tempvar;end
Best Answer