如果else语句更有效,我可以这样做吗?

Mia*_*Mia 3 performance matlab if-statement

任何关于比下面的if else函数更有效的解决方案的想法?这占用了代码的大部分时间,因此我需要减少它.

完整的功能是

     function result = vre(t,r,e,n,d)
         if (e==4 && r>0)
        result = 0;
    elseif (e==4 && r==0)
        result = 1;
    elseif (e<4 && r==1)
        result = t;
    elseif (e<4 && r==2)
        result = d;            
    else
        result=n;
    end
end
Run Code Online (Sandbox Code Playgroud)

tmp*_*rce 5

如果此功能占用了大部分处理时间,那几乎可以肯定是因为您调用了太多次.反过来,这可能是因为您分别在向量或矩阵的每个元素上调用它.我建议改变函数接受矩阵输入er,这样你就可以同时执行所有的检查- matlab是专为矩阵运算,所以服用这些优势始终是一个好主意.

function result = vre(t,r,e,n,d)
#% add error checking for size of input args if desired
result = ones(size(e))*n; #% default result; next assign special cases
result(e==4 & r>0) = 0; #% note the single & for element-wise 'and'
result(e==4 & r==0) = 1;
result(e<4 & r==1) = t;
result(e<4 & r==2) = d;

end
Run Code Online (Sandbox Code Playgroud)

该函数现在返回一个与输入矩阵大小相同的矩阵 - 对于单个元素,它将与您当前的版本完全相同,但对于更高维度的输入,它也可以工作,并且可能会给您带来显着的速度提升.