matlab 句柄数组,数组 – 如何在创建句柄对象数组作为对象属性时避免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

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

for n=10000:-1:1 % counting backwards for Memory pre-allocation

ObjectList(n)=SomeSimpleObject();

end

但是,在类构造函数中执行相同的操作并将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 obj=HostingObject()

for n=10000:-1:1 % counting backwards for Memory pre-allocation

obj.ObjectList(n)=SomeSimpleObject();

end

end

end

end

寻找答案我遇到了关于Matlab内存分配和garbage collection的讨论.Mikhail的答案(也与我的问题没有直接关系)让我觉得它可能是Matlab实现对象的方式的根本问题,但我是还是不确定.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值