在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)
似乎不起作用..
答案 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);
我建议坚持你的细胞阵列方法。使用一组对象提到的其他答案之一;我不建议这样做!分配到预先分配的单元阵列是快速的,其中分配到对象数组中相对非常慢。我认为你已经有了正确的方法。