matlab中一个函数有常数,MATLAB中的常量

不要使用myClass.myconst调用常量,而不要先创build实例! 除非速度不是问题。 我的印象是,第一次调用一个常量属性会创build一个实例,然后所有将来的调用都会引用这个实例( 常量值属性 ),但是我不再相信这种情况。 我创build了一个非常基本的testing函数:

tic; for n = 1:N a = myObj.field; end t = toc;

用类定义如下:

classdef TestObj properties field = 10; end end

要么:

classdef TestHandleObj < handle properties field = 10; end end

要么:

classdef TestConstant properties (Constant) field = 10; end end

对于不同的对象,处理对象,嵌套对象等(以及赋值操作)的情况。 请注意,这些都是标量。 我没有调查数组,单元格或字符。 对于N = 1,000,000,我的结果(总耗时)是:

Access(s) Assign(s) Type of object/call 0.0034 0.0042 'myObj.field' 0.0033 0.0042 'myStruct.field' 0.0034 0.0033 'myVar' //Plain old workspace evaluation 0.0033 0.0042 'myNestedObj.obj.field' 0.1581 0.3066 'myHandleObj.field' 0.1694 0.3124 'myNestedHandleObj.handleObj.field' 29.2161 - 'TestConstant.const' //Call directly to class(supposed to be faster) 0.0034 - 'myTestConstant.const' //Create an instance of TestConstant 0.0051 0.0078 'TestObj > methods' //This calls get and set methods that loop internally 0.1574 0.3053 'TestHandleObj > methods' //get and set methods (internal loop)

我也创build了一个Java类,并进行了类似的testing:

12.18 17.53 'jObj.field > in matlab for loop' 0.0043 0.0039 'jObj.get and jObj.set loop N times internally'

调用Java对象的开销很大,但是在对象内部,简单的访问和分配操作的发生和普通的matlab对象一样快。 如果你想引用行为,Java可能是要走的路。 我没有调查嵌套函数内的对象调用,但我看到了一些奇怪的事情。 另外,当涉及到很多这些东西的时候,profiler是垃圾的,这就是为什么我切换到手动节省时间的原因。

作为参考,使用的Java类:

public class JtestObj { public double field = 10; public double getMe() { double N = 1000000; double val = 0; for (int i = 1; i < N; i++) { val = this.field; } return val; } public void setMe(double val) { double N = 1000000; for (int i = 1; i < N; i++){ this.field = val; } } }

在相关的说明,这是一个NIST常量表的链接: ascii表和一个matlab函数返回一个结构与列出的值: Matlab FileExchange

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值