matlab局部静态变量

Gia*_*nni 3 matlab

为了在不同的场景中测试算法,需要迭代地调用matlab函数alg.m.

alg.m中的瓶颈是这样的:

load large5Dmatrix.mat
small2Dmatrix=large5Dmatrix(:,:,i,j,k)  % i,j and k change at every call of alg.m
clear large5Dmatrix
Run Code Online (Sandbox Code Playgroud)

为了加速我的测试,我想large5Dmatrix只在第一次调用alg.m时加载,并且对将来的调用有效,可能只在alg.m的范围内

有没有办法在matlab中将其设置large5Dmatrix 为全局?

您能想到在alg.m中使用这个大的常量值矩阵的更好方法吗?

Gun*_*uyf 10

您可以使用persistent作为静态局部变量:

function myfun(myargs)
    persistent large5Dmatrix
    if isempty(large5Dmatrix)
        load large5Dmatrix.mat;
    end

    small2Dmatrix=large5Dmatrix(:,:,i,j,k)  % i,j and k change at every call of alg.m
    % ... 
end
Run Code Online (Sandbox Code Playgroud)

但由于你没有改变large5Dmatrix,@高性能标记答案更适合,没有计算含义.除非你真的,真的不想large5Dmatrix在调用者的范围内.