MATLAB类数组

Dan*_*ani 3 arrays oop performance matlab

在MATLAB中管理同一类的大量实例的最佳方法是什么?

使用天真的方式产生绝对的结果:

classdef Request
    properties
        num=7;
    end
    methods
        function f=foo(this)
            f = this.num + 4;
        end
    end
end

>> a=[];  

>> tic,for i=1:1000 a=[a Request];end;toc  

Elapsed time is 5.426852 seconds.  

>> tic,for i=1:1000 a=[a Request];end;toc  
Elapsed time is 31.261500 seconds.  
Run Code Online (Sandbox Code Playgroud)

继承句柄大大改善了结果:

classdef RequestH < handle
    properties
        num=7;
    end
    methods
        function f=foo(this)
            f = this.num + 4;
        end
    end
end

>> tic,for i=1:1000 a=[a RequestH];end;toc
Elapsed time is 0.097472 seconds.
>> tic,for i=1:1000 a=[a RequestH];end;toc
Elapsed time is 0.134007 seconds.
>> tic,for i=1:1000 a=[a RequestH];end;toc
Elapsed time is 0.174573 seconds.
Run Code Online (Sandbox Code Playgroud)

但仍然不是一个可接受的性能,特别是考虑到增加的重新分配开销

有没有办法预分配类数组?关于如何有效管理大量物体的任何想法?

谢谢,
Dani

jjk*_*ker 5

到了这么晚,但这不是另一种解决方案吗?

a = Request.empty(1000,0); tic; for i=1:1000, a(i)=Request; end; toc;
Elapsed time is 0.087539 seconds.
Run Code Online (Sandbox Code Playgroud)

甚至更好:

a(1000, 1) = Request;
Elapsed time is 0.019755 seconds.
Run Code Online (Sandbox Code Playgroud)