2016-02-22 39 views
0

我正在Matlab中使用無線網絡。我創建了聯繫人表,這意味着兩個節點具有聯繫人以及聯繫人的開始和結束時間。如下所示,聯繫人表格是Matlab中的結構形式:從struct到cellarray - Matlab

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

假設這是我的聯繫人表的第一個條目。現在我需要與這個詞條轉化爲一個cellarray這將有以下形式:

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中進行轉換?我明白,結構中存在許多條目,cellarray將具有雙倍大小,例如對於50個條目,cellarray中將有100行,但我不知道如何執行此操作。

回答

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{:}) 

所以,如果在你的榜樣,我們創建了兩個相同的contact的只有我來測試它。

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' 
+0

非常感謝您!這正是我正在尋找的。 – vasouli