显示结构数组的某些元素
Displaying certain elements of a structure array
我有一个问题要问。
我正在尝试创建一个名为 'passavg_structure' 的函数,该函数将空域结构数组(将在下面显示)作为输入参数,并输出前往指定城市的平均乘客数量。
空域结构数组如下所示:
>> airspace(1)
ans =
Flight_Number: 'BF 123'
Speed: 515.2000
Heading: 90
Passengers: 154
Crew: {'Behnam' 'Jane' 'Jill' 'Ning'}
Destination: 'Montreal'
Feet: 22000
Latitude_Longitude: [50 100]
>> airspace(2)
ans =
Flight_Number: 'VSO 456'
Speed: 99.6000
Heading: 270
Passengers: 270
Crew: {'Frances' 'Jake' 'Jaiwei'}
Destination: 'Los Angeles'
Feet: 21000
Latitude_Longitude: [50 80]
>> airspace(3)
ans =
Flight_Number: 'BF 8421'
Speed: 1.5057e+03
Heading: 170
Passengers: 0
Crew: {'Giuseppe' 'Susan'}
Destination: 'Calgary'
Feet: 33000
Latitude_Longitude: [60 80]
>> airspace(4)
ans =
Flight_Number: 'AB 896'
Speed: 500
Heading: 90
Passengers: 132
Crew: {'Hao' 'Ashraf' 'Sue'}
Destination: 'Montreal'
Feet: 33000
Latitude_Longitude: [50 100]
所以我想做的是遍历空域的名称,如果它等于函数的输入参数给出的名称,那么它将找到名称在结构数组中出现的位置,并且加上乘客人数,然后除以该名字被使用的次数,得到平均值。我的不完整代码如下:
function output = passavg_structure(airspace,name)
output = 0;
[a, b, c, d] = airspace(:).Destination;
for k = {a,b,c,d}
if strcmp(k,name) == 1
output = airspace().Passengers;
else
output = 0;
end
output = output/;
end
我不知道如何找到匹配名称在结构数组中出现的位置。我觉得那是我的代码问题,因此它不完整,因为我不确定该怎么做。
例如,假设我们做了:
passavg_structure(airspace,'Montreal')
输出将是 = 143,因为它添加了来自哪里的乘客
蒙特利尔发生并除以 2,因为蒙特利尔发生了两次。
如有任何帮助,我们将不胜感激!
谢谢大家。
您可以使用 ismember
来非常直接地解决您的问题:
function out = passavg_structure(airspace, name)
out = mean([airspace(ismember({airspace(:).Destination}, name)).Passengers]);
和out
包含到达目的地name
的平均乘客数。
最佳,
mean([airspace(strcmpi({airspace(:).Destination},'Montreal')).Passengers])
由内而外
- 获取字段目标(returns 逗号分隔列表)
- 将 csv 放入单元格中,因为它包含字符串
- 使用 strcmpi 获取匹配条目的逻辑索引
- 使用逻辑索引获取包含目标蒙特利尔的所有数据的子结构
- 将 csv 放入数组中,因为它包含数字数据
- 应用均值
如果没有数据存在,表示returns NaN
我有一个问题要问。 我正在尝试创建一个名为 'passavg_structure' 的函数,该函数将空域结构数组(将在下面显示)作为输入参数,并输出前往指定城市的平均乘客数量。
空域结构数组如下所示:
>> airspace(1)
ans =
Flight_Number: 'BF 123'
Speed: 515.2000
Heading: 90
Passengers: 154
Crew: {'Behnam' 'Jane' 'Jill' 'Ning'}
Destination: 'Montreal'
Feet: 22000
Latitude_Longitude: [50 100]
>> airspace(2)
ans =
Flight_Number: 'VSO 456'
Speed: 99.6000
Heading: 270
Passengers: 270
Crew: {'Frances' 'Jake' 'Jaiwei'}
Destination: 'Los Angeles'
Feet: 21000
Latitude_Longitude: [50 80]
>> airspace(3)
ans =
Flight_Number: 'BF 8421'
Speed: 1.5057e+03
Heading: 170
Passengers: 0
Crew: {'Giuseppe' 'Susan'}
Destination: 'Calgary'
Feet: 33000
Latitude_Longitude: [60 80]
>> airspace(4)
ans =
Flight_Number: 'AB 896'
Speed: 500
Heading: 90
Passengers: 132
Crew: {'Hao' 'Ashraf' 'Sue'}
Destination: 'Montreal'
Feet: 33000
Latitude_Longitude: [50 100]
所以我想做的是遍历空域的名称,如果它等于函数的输入参数给出的名称,那么它将找到名称在结构数组中出现的位置,并且加上乘客人数,然后除以该名字被使用的次数,得到平均值。我的不完整代码如下:
function output = passavg_structure(airspace,name)
output = 0;
[a, b, c, d] = airspace(:).Destination;
for k = {a,b,c,d}
if strcmp(k,name) == 1
output = airspace().Passengers;
else
output = 0;
end
output = output/;
end
我不知道如何找到匹配名称在结构数组中出现的位置。我觉得那是我的代码问题,因此它不完整,因为我不确定该怎么做。
例如,假设我们做了:
passavg_structure(airspace,'Montreal')
输出将是 = 143,因为它添加了来自哪里的乘客 蒙特利尔发生并除以 2,因为蒙特利尔发生了两次。
如有任何帮助,我们将不胜感激!
谢谢大家。
您可以使用 ismember
来非常直接地解决您的问题:
function out = passavg_structure(airspace, name)
out = mean([airspace(ismember({airspace(:).Destination}, name)).Passengers]);
和out
包含到达目的地name
的平均乘客数。
最佳,
mean([airspace(strcmpi({airspace(:).Destination},'Montreal')).Passengers])
由内而外
- 获取字段目标(returns 逗号分隔列表)
- 将 csv 放入单元格中,因为它包含字符串
- 使用 strcmpi 获取匹配条目的逻辑索引
- 使用逻辑索引获取包含目标蒙特利尔的所有数据的子结构
- 将 csv 放入数组中,因为它包含数字数据
- 应用均值
如果没有数据存在,表示returns NaN