2012-02-13 107 views
2

在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)似乎并没有工作..

回答

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 
0

recommended way to pre-allocate a cell array是一个:

pointcell = cell(npoints); 

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

其实,在我的情况下,似乎我需要pointcell = cell(npoints,1) – 2012-02-13 09:31:36

0
pointcell = cell(npoints, 1); 

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

+0

谢谢你的建议! – 2012-02-14 13:24:15