2011-11-03 96 views
1

在MATLAB我想保留的折線列表非空大小的信息在一個容器中,我認爲最好的辦法是使用單元陣列爲這個任務。每行將在單元格數組中以行的形式表示,頂點(x,y)是單元格的元素。不同的線條長度不同,這就是爲什麼我認爲使用單元陣列是個好主意。細胞陣列

然而,我的問題是,我不知道如何追加到單元格陣列中每行的第一個非空元素?

下面是一個例子:

cell{1,1} = 1 
cell{2,1} = 2 
cell{3,1} = 3 
cell{2,2} = 4 
cell{2,3} = 5 

cell = 

    [1]  []  [] 
    [2] [4] [5] 
    [3]  []  [] 

比如現在我要一個新元素追加到第1行的結束,而另一個以第2行。我怎麼知道什麼是第一我可以追加新元素的位置?

或者我使用單元格陣列在單元陣列這個任務的shell?

如何實現一個多段線MATLAB列表的容器?

+1

什麼陣列的電池? 'c = {[1],[2 4 5],[3]};'。它不應該是非常高效的,但它很容易使用。除了閱讀和儲存新點外,你是否需要進行操作? –

+0

你說你想存儲頂點'(x,y)',但是隻把整數放入你的單元格數組中。這些指數是否存儲在別處? –

回答

0

這是一種糟糕的方式來存儲您的數據,爲您遇到的問題。一對夫婦說明:

  1. 的第一列被用作索引(即1折線1,2爲折線2等),因爲該信息已經隱含地存儲在數據的結構,它是不必要。
  2. 使用這種方法,積分將不得不堆積下一個彼此,這將是一個噩夢索引。
  3. 隨着每個x和y在一個不同的單元格中,即使單個點繪製/存儲也是不必要的麻煩。

有兩種好方法可以存儲所有這些信息。

  1. 電池陣列:像克萊門特指出,這是好的和簡單,將讓你在沿着第二尺寸相同折線棧的不同點。

    celldata = {[] [4 5] []}; 
    celldata{2} = [celldata{2}; 1 1]; 
    celldata{3} = [0.5 0.5]; 
    
    >> celldata 
    
    celldata = 
    
        [] [2x2 double] [1x2 double] 
    
  2. 結構數組:這是一個很好的路要走,如果你想存儲折線級元數據與您一起分。

    strucdata = struct('points', {[] [4 5] []}, 'info', {'blah', 'blah', 'blah'}); 
    strucdata(2).points = [strucdata(2).points; 1 1]; 
    strucdata(3).points = [0.5 0.5]; 
    
    >> strucdata 
    
    strucdata = 
    
    1x3 struct array with fields: 
        points 
        info 
    
    >> strucdata(2) 
    
    ans = 
    
        points: [2x2 double] 
         info: 'blah' 
    
+0

我最終使用了頂點的結構,單線的單元陣列和所有線的單元陣列。我認爲這種方式非常清晰和高效。你怎麼看? http://pastebin.com/uKC98Ym7 – zsero

0

要回答你的第一個問題,你可以使用這個:

n=1; 
length([cell{n,:}])+1 
n=2; 
length([cell{n,:}])+1 

隨着[...]你對待電池片作爲一個數組,而不是幾個標量值。