1

在 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 行。我如何知道可以附加新元素的第一个位置是什么?

或者外壳我在单元格数组中使用单元格数组来完成这项任务?

您将如何为 MATLAB 的折线列表实现容器?

4

2 回答 2

0

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

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

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

于 2011-11-03T08:22:25.070 回答
0

对于您遇到的问题,这是存储数据的不好方法。几点注意事项:

  1. 第一列用作索引(即 1 表示折线 1,2 表示折线 2 等),这是不必要的,因为该信息已隐式存储在数据结构中。
  2. 使用这种方法,点必须彼此相邻堆叠,这将是索引的噩梦。
  3. 由于每个 x 和 y 在不同的单元格中,即使是单个点也将成为不必要的麻烦。

有两种存储所有这些信息的好方法。

  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'
    
于 2011-11-03T17:11:30.717 回答