2011-11-03 130 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 

随着[...]你对待电池片作为一个数组,而不是几个标量值。