我的answers之一最近因建议使用cd(path_to_toolbox
)而非path
工具之一而被投票,例如addpath
或rmpath
。鉴于我收到的热烈批评,我必须想象使用path
工具有很好的理由,可能它们在某种程度上更强大,特别是当代码分发给其他系统时。
然后我决定计算cd
与addpath
的表现,并惊讶地发现以下结果。在每次试验之前,我清除了工作空间并创建了一个具有交替路径的字符串数组:
clear
clc
p1 = 'c:\MATLAB7\toolbox\symbolic\@sym\';
p2 = matlabroot;
newpath = repmat(' ',100,100);
for ii=1:2:99
newpath(ii,1:length(p1)) = p1;
newpath(ii+1,1:length(p2)) = p2;
end
然后我按照以下方式运行addpath
或cd
:
tic
for ii=1:100
addpath(newpath(ii,:))
end
toc
经过的时间是13.437000秒。
tic
for ii=1:100
cd(newpath(ii,:))
end
toc
经过的时间是1.078000秒。
对于是否存在使用cd
的条件的任何评论可能是合理的,例如设置函数的路径(工具箱或其他方式),我们表示赞赏。虽然它可能被认为是草率的,我已经使用cd
多年了,如果重复使用减速可以很明显,我发现如果它不用于程序的高度迭代部分,减速值得它带来的简单性编码。值得注意的是,addpath
并没有使用起来更复杂,但现在我似乎有理由更喜欢cd
:它实际上更快。
修改
作为这篇文章的后记,我恳求 mea culpa 反复使用cd
(在本例中为addpath
)。但是,在经常用于快速和脏脚本的语言中应该存在这种用法的空间。应该记住,matlab的用户之间存在一定程度的专业知识,在某些情况下,较少“先进”和看似草率的编程技术实际上可以在短期内被认为是有利的(如果不是长期的话,或者版本和目录结构管理可能会出现问题)。
作为附录,我在SO及其后的帖子中添加了一些链接,以解决内置函数覆盖,阴影等问题,其中addpath
(我也认为cd
也可以)使用:
How to unhide an overriden function?
How to get a handle to an overriden built-in function?
How to wrap an already existing function with a new function of the same name
http://www.mathworks.in/matlabcentral/newsreader/view_thread/264354
答案 0 :(得分:3)
显然随着path
越来越长,MATLAB必须搜索更多位置以查找函数,脚本,类等。所以我想如果你有一个对性能有负面影响的话。真的很长path
另一方面,当前目录只是一个必须搜索的位置(当然是尊重优先顺序)。
另外,将两者进行比较是不公平的,除非您可以将所有文件放在一个文件夹中。
只是关于你的编码风格的说明:你可以使用字符串的cellarray而不是char-matrix来存储newpath
:
newpath = cell(100,1);
for i=1:100
newpath{i} = '...';
end
答案 1 :(得分:1)
我认为如果你使用cd
在这样的路径上添加一些东西,应该避免大多数的缺点:
function addpathwithcd(pathToAdd)
currentPath = pwd;
cd(pathToAdd);
cd(currentPath);
但是,在进行(非常小的)测试后,对我来说这似乎不比简单地使用addpath(pathToAdd)
更快。
实际上这对我来说有点令人惊讶,因为你录制13倍的速度差异,而我只使用CD两次,因此我预计速度差异大约为6倍。