【发布时间】:2013-12-03 00:42:33
【问题描述】:
我正在尝试编写一个函数(参见下面的代码),该函数将创建一个机场列表,其中有超过 1,000 个航班起飞或到达,然后提供一个向量,其中包含 (x, y) 格式。机场和航班数据分别存放在维度为 1x6267 和 1x136010 的单独结构中,每个机场和航班都有一个唯一的 ID 号,对应于结构中的列。尽管我编写的代码确实成功地识别了所有有 1000 多个到达/离开组合的机场,但该函数需要将近 20 分钟才能执行,并且只提供机场的 ID 号,而不是它们在 airports 结构中的索引。我需要对代码进行哪些更改才能使其运行时间低于 5 分钟,以及如何为机场创建 (x,y) 索引向量?任何帮助将不胜感激!谢谢!
附:我对 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
【问题讨论】:
-
您的
flights似乎是很好的数字和正方形。如果您想更有效/更轻松地处理它,它应该有助于将此信息存储在矩阵而不是结构中。这可能也适用于其他一些结构。 -
我同意矩阵会更加简单和高效。不幸的是,这是我正在学习的 MATLAB 课程的课堂练习的一部分,所以我不得不按照教授设置数据库的方式进行。
标签: performance matlab optimization vector indexing