我在MATLAB中有一个对象数组,我在一个循环中调用它们的构造函数:
antsNumber = 5;
for counter = 1: antsNumber
ant(counter) = TAnt(source, target);
end
MATLAB警告我使用预分配来加速该过程。我知道预分配的好处,但我不知道如何为对象做到这一点。
我在MATLAB中有一个对象数组,我在一个循环中调用它们的构造函数:
antsNumber = 5;
for counter = 1: antsNumber
ant(counter) = TAnt(source, target);
end
MATLAB警告我使用预分配来加速该过程。我知道预分配的好处,但我不知道如何为对象做到这一点。
以下链接可能有所帮助:
http://www.mathworks.com/help/techdoc/matlab_oop/brd4btr.html#brd4nrh
死链接的Web存档
新链接:
http://de.mathworks.com/help/matlab/matlab_oop/creating-object-arrays.html
以下是一些选项,需要您为其设计类构造函数 TAnt
这样它就能够处理了 没有输入参数的情况:
您可以创建默认值 TAnt
object(通过调用没有输入参数的构造函数)并使用它进行复制 REPMAT 在进入for循环之前初始化数组:
ant = repmat(TAnt(),1,5); %# Replicate the default object
然后,您可以遍历数组,用新的默认对象覆盖每个默认对象。
如果你的 TAnt
对象都是用相同的数据进行初始化的 不是 源自 处理班,你可以创建1个对象并使用 REPMAT 复制它:
ant = repmat(TAnt(source,target),1,5); %# Replicate the object
这将允许您完全避免循环。
如果 TAnt
是 源自 处理班,上面的第一个选项应该工作正常,但第二个选项不会,因为它会给你5个句柄副本 一样 对象而不是5个句柄 不同 对象。
它给出的警告是多余的,除非你做的是计算繁重的东西,否则我会忽略它。
它给你错误的原因是因为它必须找到新的空间。说,我给你一个七个对象的列表,我告诉你,你需要把它们全部放在一排,然后我就去,给你一些你需要放在某处的东西。然后我给你第八个对象并告诉你在第七个之后把它放好。因为你有第八个对象的东西,你要么必须移开它,要么你必须移动所有七个对象。 Matlab告诉你,如果你事先告诉它你要把5件东西放在那里,而不是一个一个地给它一个东西,每次都要寻找一个新的位置,它会更快。您可以通过将此行添加到代码顶部来实现:
ant = [1:5];
还有其他方法可以做到这一点。
不确定我的问题是否正确,但是如果你想初始化一个自定义类“TAnt”的数组,我就是这样做的
function obj = TAnt(source, target)
if nargin > 0
obj.mySource = source;
obj.myTarget = target;
else
obj.mySource = defaultValue;
obj.myTarget = defaultValue;
end
end
然后初始化/预分配默认TAnt对象的数组,
ants(1,n) = TAnt(); % n is the length of your ants array