【问题标题】:Displaying certain elements of a structure array显示结构数组的某些元素
【发布时间】:2015-04-02 20:11:18
【问题描述】:

我有一个简短的问题要问。 我正在尝试创建一个名为“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,因为蒙特利尔出现了两次。

对此的任何帮助将不胜感激!

谢谢大家。

【问题讨论】:

    标签: arrays matlab structure


    【解决方案1】:
    mean([airspace(strcmpi({airspace(:).Destination},'Montreal')).Passengers])
    

    由内而外

    1. 获取字段目的地(返回逗号分隔列表)
    2. 将 csv 放入单元格中,因为它包含字符串
    3. 使用 strcmpi 获取匹配条目的逻辑索引
    4. 使用逻辑索引获取包含目的地蒙特利尔的所有数据的子结构
    5. 将 csv 放入数组中,因为它包含数字数据
    6. 应用均值

    如果没有数据存在,则均值返回NaN

    【讨论】:

      【解决方案2】:

      您可以使用ismember 直接解决您的问题:

      function out = passavg_structure(airspace, name)
      
      out = mean([airspace(ismember({airspace(:).Destination}, name)).Passengers]);
      

      out 包含到达目的地name 的平均乘客人数。

      最好的,

      【讨论】:

      • 谢谢大家的帮助!
      猜你喜欢
      • 1970-01-01
      • 2019-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-03
      • 2020-02-13
      • 2016-01-28
      相关资源
      最近更新 更多