您可能要创建“控制柄对象”(Shooters )数组并将其保存到另一个控制柄对象(Squardron )的属性中。 在我看来非常
similar problem discussion可能会帮助你。
简而言之,你在做什么可能不好看,但也许已经好了。
在Matlab中创建数组时,通常需要进行一些预分配以保留内存,从而大大提高性能。
通常,这种事
a=zeros (1,1000 );
for n=1:1000
a(n )=n;
结束
(这里a=1:1000; 会变得更好)
对于对象,预分配通过将其中一个对象分配给数组的最后一个字段来工作。 然后,Matlab调用无参数对象的构造函数,并在所创建对象(句柄)前面的其他字段中输入值。 因此,对象的预分配如下所示:
a (1,1000 )=对象构造器;
for n=1:1000
a(n )=对象构造器;
结束
或者干脆
for n=1000:-1:1
a(n )=对象构造器;
结束
确保可以在不使用参数的情况下调用Shooter,并且您应该能够执行以下操作:
fori shooter=obj.num _ shooters :-1:1
obj.shooterarray(ishooter )=shooter ) num_targets,time_steps;
结束
但是,事实证明,由于某种原因,将对象数组直接存储在另一个对象的属性中会导致非常差的性能。 ()在这种情况下,预分配数组可能没有效果。 因此,在这种情况下,使用辅助变量立即将完整数组分配给属性是提高性能的好主意。
我试试:
fori shooter=obj.num _ shooters :-1:1
a(ishooter )=shooter(num_targets,time_steps );
结束
obj.ShooterArray=a;
再次-有关详细信息,请参见this discussion