【问题标题】:From struct to cellarray - Matlab从结构到元胞数组 - Matlab
【发布时间】:2016-02-22 20:11:19
【问题描述】:

我正在使用 Matlab 中的无线网络。我已经创建了联系表,这意味着两个节点有联系以及联系的开始和结束时间。联系表在Matlab中是struct的形式,如下图:

contact(1)
node_1:23
node_2:76
t_start: 45
t_end: 58

假设这是我的联系人表的第一个条目。现在我需要将此条目转换为具有以下形式的单元数组:

45 CONN 23 76 up
58 CONN 23 76 down

或者,写成更一般的形式:

t_start CONN node_1 node_2 up
t_end   CONN node_1 node_2 down

我需要采用这种特殊形式才能将它们导出并用于 ONE 模拟器。所以我的问题是如何在 Matlab 中转换它?我知道,由于结构中存在许多条目,单元格数组将具有双倍大小,例如对于 50 个条目,单元格数组中将有 100 行,但我不知道该怎么做。

【问题讨论】:

    标签: matlab struct matlab-struct


    【解决方案1】:

    因此,您将要使用arrayfun 为每个元素生成数据结构。然后将它们连接在一起。

    % Anonymous function that creates a data structure for ONE struct entry
    func = @(c){c.t_start, 'CONN', c.node_1, c.node_2, 'up'; ...
                c.t_end,   'CONN', c.node_1, c.node_2, 'down'};
    
    % Now perform this on ALL struct elements and concatenate the result.
    data = arrayfun(func, contact, 'uniform', 0); 
    data = cat(1, data{:})
    

    因此,如果在您的示例中,我们创建两个相同的 contacts 只是为了测试它。

    contact = repmat(contact, [2, 1]);
    

    我们会得到

    data = 
    
        [45]    'CONN'    [23]    [76]    'up'  
        [58]    'CONN'    [23]    [76]    'down'
        [45]    'CONN'    [23]    [76]    'up'  
        [58]    'CONN'    [23]    [76]    'down'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-26
      • 1970-01-01
      • 1970-01-01
      • 2021-07-08
      相关资源
      最近更新 更多