楼主说的第三次执行时间是不准确的!恰恰相反,第三次应该是更准确的。准确判断一个函数的执行时间,应该是多次调用取平均值。
事实上是这样的,MATLAB中,函数调用都要有一定的开销,这种开销一般是built-in(像sin,cos,zeros,ones,find,all,any等等但凡你 type 文件名,MATLAB会告诉你XXX is a built-in function.这样的函数)为最高,其次是一般的m文件,工具箱里能看到源码的那些m函数以及你自己写的m文件,匿名函数,子函数、nested function等等。这些总的来说调用效率都比较高,调用效率最低的是inline函数类型。
函数调用开销相对于数值计算来说往往相当可观,即使你用built-in,因为为了使得函数具有通用性,很多函数刚开始都会有一些判断、准备工作,往往判断好几层才到了真正算法实现部分。楼主之所以得到intersect函数效率不高,原因在于你举的例子规模太小了,intersect函数执行时间都花费在了函数调用上。而你用循环写的代码由于规模太小,效率低的事实被掩盖了。楼主试试下面代码就明白了: