单元阵列的非空大小信息

时间:2011-11-03 05:17:07

标签: arrays list matlab polyline cell-array

在MATLAB中我想在容器中保留一个折线列表 - 包含顶点(x,y) - 我认为最好的想法是使用单元格数组为此任务。每行将在单元格数组中以行的形式表示,顶点(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实现容器?

2 个答案:

答案 0 :(得分:0)

要回答您的第一个问题,您可以使用:

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

使用[...]将单元格切片视为数组,而不是几个标量值。

答案 1 :(得分:0)

对于您遇到的问题,这是存储数据的一种不好的方法。几个笔记:

  1. 第一列用作索引(即折线1为1,折线2为2等),这是不必要的,因为该信息已隐式存储在数据结构中。
  2. 使用这种方法,必须将点 next 相互堆叠,这将成为索引的噩梦。
  3. 如果每个x和y位于不同的单元格中,那么绘制/存储一个点就不会有麻烦。
  4. 有两种很好的方法可以存储所有这些信息。

    1. 单元格数组:就像Clement指出的那样,这很简单,并且可以让您沿着第二维在同一折线中堆叠不同的点。

      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'