Я довольно новичок в Matlab, но для своей работы мне нужно импортировать ОГРОМНЫЙ набор данных и организовать его определенным образом.Я написал код, который будет делать это, но очень неэффективно (это только мой третий основной кусок кода, и это занимает несколько часов).Matlab говорит мне, что я могу предварительно распределить свои переменные (на самом деле около пятидесяти раз), но у меня возникают проблемы с поиском, как это сделать, потому что я не уверен, к какой матрице будут добавляться данные для каждой итерации в цикле for.Сам код, вероятно, объясняет это лучше, чем я.
(Это всего лишь небольшая часть, но, надеюсь, покажет мою проблему)
for x= 1:length(firstinSeq)
for y= 1:length(littledataPassed-1)
if firstinSeq(x,1)== littledataPassed(y,1) && firstinSeq(x,2)== littledataPassed(y,2)
switch firstinSeq(x,3)
case 0
for z= 0:1000
w= y+z;
if firstinSeq(x,4)== littledataPassed(w,4)
if littledataPassed(w,6)== 1 && firstinSeq(x,2)== littledataPassed(w,2) && littledataPassed(w,5)== 0
msgLength0= [msgLength0; firstinSeq(x,:) littledataPassed(w,:)];
break
else continue
end
else msgLength0= [msgLength0; firstinSeq(x,:) [0 0 0 0 0 0]];
break
end
end
case 1
for z= 0:1000
w= y+z;
if firstinSeq(x,4)== littledataPassed(w,4) %if sequence not the same, terminate
if littledataPassed(w,6)== 1 && firstinSeq(x,2)== littledataPassed(w,2) && littledataPassed(w,5)== 0
msgLength1= [msgLength1; firstinSeq(x,:) littledataPassed(w,:)];
break
else continue
end
else msgLength1= [msgLength1; firstinSeq(x,:) [0 0 1 0 0 0]];
break
end
end
case 2
for z= 0:1000
w= y+z;
if firstinSeq(x,4)== littledataPassed(w,4)
if littledataPassed(w,6)== 1 && firstinSeq(x,2)== littledataPassed(w,2) && littledataPassed(w,5)== 0
msgLength2= [msgLength2; firstinSeq(x,:) littledataPassed(w,:)];
break
else continue
end
else msgLength2= [msgLength2; firstinSeq(x,:) [0 0 2 0 0 0]];
break
end
end
for z= 0:1000
w= y+z;
if firstinSeq(x,4)== littledataPassed(w,4)
if littledataPassed(w,6)== 1 && firstinSeq(x,2)== littledataPassed(w,2) && littledataPassed(w,5)== 1
msgLength2= [msgLength2; firstinSeq(x,:) littledataPassed(w,:)];
break
else continue
end
else msgLength2= [msgLength2; firstinSeq(x,:) [0 0 2 0 1 0]];
break
end
end
любые мысли о том, как я мог бы предварительно выделить эти переменные (msgLength0,1,2 и т.д.)?У них нет данных, добавленных для каждого значения в цикле, и я не уверен в конечном размере для каждого прогона.На данный момент у меня есть восемь вариантов переключения, что делает эту программу очень медленной.