我在MATLAB中有一个对象数组,我在一个循环中调用它们的构造函数:
antsNumber = 5;
for counter = 1: antsNumber
ant(counter) = TAnt(source, target);
end
Run Code Online (Sandbox Code Playgroud)
MATLAB警告我使用预分配来加速该过程.我确实知道预分配的好处,但我不知道如何为对象做到这一点.
以下是一些选项,它们要求您设计类构造函数,TAnt以便它能够处理无输入参数的情况:
您可以创建一个默认TAnt对象(通过调用没有输入参数的构造函数)并使用REPMAT复制它以在进入for循环之前初始化您的数组:
ant = repmat(TAnt(),1,5); %# Replicate the default object
Run Code Online (Sandbox Code Playgroud)
然后,您可以循环遍历数组,用新的默认对象覆盖每个默认对象.
如果您的TAnt对象都使用相同的数据进行初始化,并且它们不是从句柄类派生的,则可以创建1个对象并使用REPMAT进行复制:
ant = repmat(TAnt(source,target),1,5); %# Replicate the object
Run Code Online (Sandbox Code Playgroud)
这样可以避免完全循环.
如果TAnt 是从句柄类派生的,那么上面的第一个选项应该可以正常工作,但是第二个选项不会,因为它会为同一个对象提供5个句柄副本,而不是5个不同对象的句柄.
以下链接可能有所帮助:
http://www.mathworks.com/help/techdoc/matlab_oop/brd4btr.html#brd4nrh
死链接的网络存档
新链接:http:
//de.mathworks.com/help/matlab/matlab_oop/creating-object-arrays.html
| 归档时间: |
|
| 查看次数: |
14919 次 |
| 最近记录: |