预分配对象的单元格数组

时间:2012-02-13 09:08:08

标签: oop matlab

在Matlab中,我有一个名为“point”的类(它不是句柄类)。

我使用一个循环来创建一个点的单元格数组,使其在每次迭代时都增长而不需要预分配:

    for k=1:npoints
      newpoint=point(*some parameters that depend on k*);
      pointcell{k}=newpoint; % pointcell grows at each iteration
    end

在此示例中,单元阵列“pointcell”在每次迭代时增长,这在性能方面可能不是最佳的。 预分配此单元阵列是否有用,如果是,如何才能完成? 仅仅使用pointcell=cell(npoints)似乎不起作用..

3 个答案:

答案 0 :(得分:2)

还要考虑使用对象数组,而不是对象的单元格数组。

当您分配单元格数组时,您并没有真正帮助Matlab管理内存。这是因为每个单元格可以是任何大小,因此唯一可以预先分配的是指针数组。 Check out this for more info on cell arrays

然后你可以通过repmat

分配一个对象数组
points = repmat(point(defaultVal1,defaultVal2,...),1,npoints);
for k=1:npoints
    newpoint=point(*some parameters that depend on k*);
    points(k)=newpoint; % pointcell grows at each iteration
end

答案 1 :(得分:0)

recommended way to pre-allocate a cell array是以下之一:

pointcell = cell(npoints);

pointcell = {};
pointcell{1, npoints} = [];

答案 2 :(得分:0)

pointcell = cell(npoints, 1);

我建议坚持你的细胞阵列方法。使用一组对象提到的其他答案之一;我不建议这样做!分配到预先分配的单元阵列是快速的,其中分配到对象数组中相对非常慢。我认为你已经有了正确的方法。