相关疑难解决方法(0)

MATLAB OOP运行缓慢还是我做错了什么?

我与实验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)

oop benchmarking matlab profiling matlab-class

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

MATLAB:匿名函数的性能问题

优化我的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)

performance matlab anonymous-function

12
推荐指数
1
解决办法
2046
查看次数