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)
如果此功能占用了大部分处理时间,那几乎可以肯定是因为您调用了太多次.反过来,这可能是因为您分别在向量或矩阵的每个元素上调用它.我建议改变函数接受矩阵输入e和r,这样你就可以同时执行所有的检查- 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)
该函数现在返回一个与输入矩阵大小相同的矩阵 - 对于单个元素,它将与您当前的版本完全相同,但对于更高维度的输入,它也可以工作,并且可能会给您带来显着的速度提升.
| 归档时间: |
|
| 查看次数: |
1138 次 |
| 最近记录: |