我与实验MATLAB OOP,因为一开始我模仿我的C++的记录器类,我把我所有的字符串辅助函数在String类,以为这将是巨大的,能够做的事情一样a + b,a == b,a.find( b )而不是strcat( a b ),strcmp( a, b ),检索的第一元件strfind( a, b ),等
问题:减速
我把上面的东西用上,并立即注意到一个急剧减速.我做错了(这当然有可能,因为我有相当有限的MATLAB经验),还是MATLAB的OOP只是引入了很多开销?
我的测试用例
这是我为字符串做的简单测试,基本上只是附加一个字符串并再次删除附加部分:
classdef String < handle
....
properties
stringobj = '';
end
function o = plus( o, b )
o.stringobj = [ o.stringobj b ];
end
function n = Length( o )
n = length( o.stringobj );
end
function o = SetLength( o, n ) …Run Code Online (Sandbox Code Playgroud) 优化我的MATLAB代码,我偶然发现了一个关于匿名函数的奇怪问题.
就像在这个线程中我意识到的那样,有时匿名函数的运行速度非常慢.但是对函数的更改很少,它的运行速度与子函数或嵌套函数一样快.
我使用这个(简单的)测试文件来重现Windows 7 64位下Matlab R2010b的行为:
clear all; close all; clc;
% functions
fn1 = @(x) x^2;
fn2 = @(x) double(x^2);
% variables
x = linspace(-100,100,100000);
N = length(x);
%% anonymous function
y = zeros(1,N);
t = tic;
for i=1:N
y(i) = fn1(x(i));
end
tm.anonymous_1 = toc(t);
%% anonymous function (modified)
y = zeros(1,N);
t = tic;
for i=1:N
y(i) = fn2(x(i));
end
tm.anonymous_2 = toc(t);
%% print
tm
Run Code Online (Sandbox Code Playgroud)
我得到的结果是:
tm =
anonymous_1: 1.0605
anonymous_2: 0.1217
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,第一种方法慢了大约10倍.我不知道是什么触发了这种加速/减速.我尝试了不同的东西,得到了几乎相同(快速)的时间:
fn2 …Run Code Online (Sandbox Code Playgroud)