相关疑难解决方法(0)

如何在MATLAB中预分配一个类数组?

我在MATLAB中有一个对象数组,我在一个循环中调用它们的构造函数:

antsNumber  = 5;
for counter = 1: antsNumber
    ant(counter) = TAnt(source, target);
end
Run Code Online (Sandbox Code Playgroud)

MATLAB警告我使用预分配来加速该过程.我确实知道预分配的好处,但我不知道如何为对象做到这一点.

oop matlab

13
推荐指数
2
解决办法
1万
查看次数

在创建句柄对象数组作为对象属性时,如何避免Matlab采用指数时间

在我看来,当在Matlab中创建一个简单的句柄对象数组时,它就是线性的.但是,如果我创建完全相同的数组并将其存储为对象的属性,则时间会呈指数级增长 - 因此在创建许多对象时程序会变得非常慢.

我的问题是为什么会发生这种情况以及如何避免这种情况? 对象属性的预分配是否在我的代码中没有正确实现,或者Matlab处理这些事情的方式是否存在根本问题?

我写了一个简单的测试来说明这个问题:

简单对象代码:

classdef SomeSimpleObject < handle
% SomeSimpleObject defines an Object that has one property

properties
    property=0;
end

methods
    function SimpleObj=SomeSimpleObject()
        if nargin~=0
            SimpleObj.property=1;
        end
    end
end

end
Run Code Online (Sandbox Code Playgroud)

使用以下脚本创建1x10.000这些简单对象的数组根据我的机器上的分析器0,4秒:

for n=10000:-1:1 % counting backwards for Memory pre-allocation
    ObjectList(n)=SomeSimpleObject();
end
Run Code Online (Sandbox Code Playgroud)

然而,在类构造函数中执行相同的操作并将10.000个对象的数组存储为属性需要59秒,并且它会更快地变得更糟.通过从这个类创建一个对象来尝试它(例如a = HostingObject)

classdef HostingObject < handle
% This Objects Hosts a List of Objects that are created in the
% constructor

properties
    ObjectList=SomeSimpleObject
end

methods
    function …
Run Code Online (Sandbox Code Playgroud)

arrays oop matlab memory-management properties

9
推荐指数
1
解决办法
3058
查看次数

标签 统计

matlab ×2

oop ×2

arrays ×1

memory-management ×1

properties ×1