在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实现容器?
答案 0 :(得分:0)
要回答您的第一个问题,您可以使用:
n=1;
length([cell{n,:}])+1
n=2;
length([cell{n,:}])+1
使用[...]
将单元格切片视为数组,而不是几个标量值。
答案 1 :(得分:0)
对于您遇到的问题,这是存储数据的一种不好的方法。几个笔记:
有两种很好的方法可以存储所有这些信息。
单元格数组:就像Clement指出的那样,这很简单,并且可以让您沿着第二维在同一折线中堆叠不同的点。
celldata = {[] [4 5] []};
celldata{2} = [celldata{2}; 1 1];
celldata{3} = [0.5 0.5];
>> celldata
celldata =
[] [2x2 double] [1x2 double]
结构数组:如果您想将折线级元数据与点一起存储,这是一个很好的方法。
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'