Я пытаюсь написать функцию (см. Код ниже), которая создаст список аэропортов, в которых вылетело или прибыло более 1000 рейсов, затем укажите вектор, содержащий индексы каждого из этих аэропортов в формате (x, y). Как аэропорт, так и данные по полету размещаются в отдельных структурах размером 1x6267 и 1x136010 соответственно, и каждый аэропорт и рейс имеют уникальный идентификационный номер, соответствующий его столбцу в структуре. Несмотря на то, что код, который я написал, успешно идентифицирует все аэропорты с более 1000 комбинированных прилетов/вылетов, функция выполняет почти 20 минут для выполнения и предоставляет только идентификационные номера аэропортов, а не их показатели в структуре аэропортов. Какие изменения мне необходимо внести в код, чтобы получить его время работы менее 5 минут и как я могу создать вектор индексов (x, y) для аэропортов? Любая помощь будет принята с благодарностью! Благодаря!Функция MATLAB: улучшение скорости/производительности кода
P.S. Я довольно новичок в MATLAB, поэтому заранее извиняюсь, если эти вопросы кажутся глупыми или очевидными.
function list = Problem10(flights, aircraft, airlines, airports)
a=zeros(1,(length(airports)));
for id=1:length(airports)
a(id)= FlightsToFrom(flights, id);
end
a(a==0) = [];
[list]=[sort(a)]
end
function tofrom = FlightsToFrom(flights, ID)
sum=0;
for ii=1:length(flights)
if (isequal (flights(1,ii).from_id, ID))||(isequal (flights(1,ii).to_id, ID))
sum=sum+1;
if sum > 1000
break;
end
end
end
if sum <=1000
tofrom=0;
else
tofrom=ID;
end
end
Вот некоторые примеры того, что база данных выглядит/ведет себя как:
(In Workspace)
airports <1x6267 struct>
aircraft <1x384 struct>
airlines <1x1559 struct>
flights <1x136010 struct>
(Inside of struct)
flights(1,6) <1x1 struct>
**Field** **Value**
airline_id 60
from_id 967
to_id 6252
aircraft_id 18
distance 32
airtime 19
passengers 0
month 1
flights(1,6).from_id <1x1 double>
967
airport(1,176) <1x1 struct>
**Field** **Value**
code 'AEX'
name 'Alexandria, LA: Alexandria International'
airport(1,176).name <1x40 char>
'Alexandria, LA: Alexandria International'
(In Command Window)
>> airports (2866)
ans =
code: 'LAX'
name: 'Los Angeles, CA: Los Angeles International'
>> airports (1, 2866)
ans =
code: 'LAX'
name: 'Los Angeles, CA: Los Angeles International'
>> airports (4703)
ans =
code: 'SEA'
name: 'Seattle, WA: Seattle/Tacoma International'
>> airports (1, 4703)
ans =
code: 'SEA'
name: 'Seattle, WA: Seattle/Tacoma International'
>> flights (4736)
ans =
airline_id: 31
from_id: 1635
to_id: 1062
aircraft_id: 194
distance: 118
airtime: 1792
passengers: 1657
month: 1
>> flights (1, 4736)
ans =
airline_id: 31
from_id: 1635
to_id: 1062
aircraft_id: 194
distance: 118
airtime: 1792
passengers: 1657
month: 1
>> flights(1,7369).to_id
ans =
830
>> flights(1,7369).from_id
ans =
1047
Ваши «полеты» кажутся красиво цифровыми и квадратными. Если вы хотите более эффективно/легко обрабатывать его, это должно помочь хранить эту информацию в матрице, а не в структуре. Это может иметь место и для некоторых других структур. –
Я согласен, что матрица будет намного проще и эффективнее. К сожалению, это было частью упражнения класса для курса MATLAB, который я принимаю, поэтому я был вынужден пойти так, как профессор создал базу данных. – user3008753