Hi all,
I am converting more than 100GB of .ASC CAN BUS data. The algorithm is pretty slow due to the fact there are struct data inside a struct data. Below you will find a basic example of my code. The line that makes it pretty slow is the following because it is looped more than a million of times.
Pos2Paste=find(isnan(Sigs{iSig2Load(j)}),1);
Is there a faster way to find the first NaN element where I can assign the value found in the struct? Maybe, I can speed up the code in another way?
Thank you in advance.
Best regards
SigNames={'s1','s2','s3','s4','s5'; 'a1','a1','a1','a2','a2'};MessLength=40;for i=1:2:MessLength messageStruct(i).Name='a1'; messageStruct(i).Signals.s1=1; messageStruct(i).Signals.s2=2; messageStruct(i).Signals.s3=3;endfor i=2:2:MessLength messageStruct(i).Name='a2'; messageStruct(i).Signals.s4=4; messageStruct(i).Signals.s5=5;endUniqueMessFound=unique({messageStruct.Name});UniqueMessageCount=countcats(categorical({messageStruct.Name},UniqueMessFound));for iSig=1:length(SigNames(1,:)) Sigs{iSig}=NaN(UniqueMessageCount(strcmp(UniqueMessFound,SigNames{2,iSig})),1);endfor i=1:MessLength Sig=fieldnames(messageStruct(i).Signals); [~,iSig2Load , iSig]=intersect(SigNames(1,:),Sig); Sig2Sel=SigNames(1,iSig2Load); for j=1:length(Sig2Sel) Pos2Paste=find(isnan(Sigs{iSig2Load(j)}),1); Sigs{iSig2Load(j)}(Pos2Paste)=single(messageStruct(i).Signals.(Sig{iSig(j)})); endend
Best Answer