本篇记录本人使用Matlab时,涉及到的有关Matlab搜索路径设置的问题。
Matlab的搜索路径
搜索路径(search path)或者路径是文件系统中所有文件夹的子集。Matlab搜索路径来高效的定位文件,且可以访问搜索路径里的任意文件。
搜索路径里文件夹的顺序很重要。当同名的文件出现在搜索路径上的多个文件夹时,Matlab使用最靠近搜索路径顶部(top)的文件夹里的那个文件。
Matlab共有两种搜索路径
MATLAB提供的文件夹或者其它MathWorks产品
这些文件夹在 “matlabroot/toolbox“下, 使用matlabroot
可以查看该根目录.MATLAB用户路径(userpath)
用户路径文件夹是存储那些MATLAB在启动时添加到搜索路径的文件.
你可以把你要运行的文件夹添加到搜索路径.
类, 包, 和私有文件夹不再搜索路径上.
MATLAB搜索路径的添加
可以使用MATLAB图形交互界面添加, 也可以使用命令添加.
使用图形用户界面添加搜索路径
对于MATLAB2013及以上版本, 添加搜索路径的按钮在, Home 选项卡下的”Environment”下, 即下图中的Set Path
打开Set Path对话框, 如下:
按照下图所示, 可以添加”DeepLearnToolbox-master”文件夹及其子文件夹到搜索路径.
下图给出了添加后的结果:
使用命令添加搜索路径
主要使用aadpath
, 命令. 下面举例说明几个函数. 假设要添加”D:\Workspace\Matlab\DL\DeepLearnToolbox-master”文件夹及其子文件夹到搜索路径, 其目录结构如下图
addpath即(Add folders to search path), 完成往搜索路径里添加文件的功能. 使用下面的命令仅仅将”DeepLearnToolbox-master”文件夹添加进搜索路径, 并未添加其子文件夹.
addpath('D:\Workspace\Matlab\DL\DeepLearnToolbox-master');
如果想将该路径添加到搜索路径 后, 那么可以使用下面的命令
addpath('D:\Workspace\Matlab\DL\DeepLearnToolbox-master','-end');
添加绝对路径
如上图所示, “DeepLearnToolbox-master”文件夹的子文件夹较多, 如果一一列举出来相当麻烦. 所以我们使用genpath
自动生成路径, 如下
genpath('D:\Workspace\Matlab\DL\DeepLearnToolbox-master')
结果输出:
ans =
D:\Workspace\Matlab\DL\DeepLearnToolbox-master;D:\Workspace\Matlab\DL\DeepLearnToolbox-master\CAE;D:\Workspace\Matlab\DL\DeepLearnToolbox-master\CNN;D:\Workspace\Matlab\DL\DeepLearnToolbox-master\DBN;D:\Workspace\Matlab\DL\DeepLearnToolbox-master\NN;D:\Workspace\Matlab\DL\DeepLearnToolbox-master\SAE;D:\Workspace\Matlab\DL\DeepLearnToolbox-master\data;D:\Workspace\Matlab\DL\DeepLearnToolbox-master\tests;D:\Workspace\Matlab\DL\DeepLearnToolbox-master\util;
可以看出, genpath命令生成了 “DeepLearnToolbox-master”文件夹及其子文件夹的所有路径.
所以将 “DeepLearnToolbox-master”文件夹及其子文件夹添加到搜索路径的命令是:
addpath(genpath('D:\Workspace\Matlab\DL\DeepLearnToolbox-master'));
这样, 你就可以在任何地方, 访问”DeepLearnToolbox-master”里的任意资源了, 这就是绝对路径的好处.
添加相对路径
也许你看到了 “DeepLearnToolbox-master”文件夹中的”README.md”文件, 是的这是一个使用说明文件, “DeepLearnToolbox-master”是一个MATLAB版工具箱, “README.md”文件就是介绍其功能及使用的. 也许你会看到文件”README.md”里说使用下面的命令添加搜索路径.
addpath(genpath('DeepLearnToolbox'));
是的, 那么会有什么不同呢? 我们把当前工作路径切换到”DL”文件夹下 (注意, 之前我们并没有强调, 那是因为不需要, 但现在需要了, 否则, 下面的命令将返回空, 这是因为MATLAB找不到”DeepLearnToolbox-master”文件夹) , 然后在MATLAB命令窗口输入genpath('DeepLearnToolbox')
, 发现返回值是:
ans =
DeepLearnToolbox-master;DeepLearnToolbox-master\CAE;DeepLearnToolbox-master\CNN;DeepLearnToolbox-master\DBN;DeepLearnToolbox-master\NN;DeepLearnToolbox-master\SAE;DeepLearnToolbox-master\data;DeepLearnToolbox-master\tests;DeepLearnToolbox-master\util;
可以看到路径个数一样, 只是”变短了”. 是的, 这是相对路径 (是相对于”DL”文件夹所在路径而言的, 而之前那个是绝对路径), 所以如果访问和使用”DeepLearnToolbox-master”工具包中的任意资源的话, 要把当前工作路径切换到”DL”文件夹下. 比如, 你想运行”DeepLearnToolbox-master”中”tests”下的测试示例, 那么你需要在把当前工作路径切换到”DL”文件夹下(而不是”tests”文件夹下), 否则, 会找不到调用的其它资源.
MATLAB搜索路径的移除
使用MATLAB图形用户界面操作, 很容易移除路径, 这里不介绍. MATLAB也提供了rmpath
用于移除搜索路径.下面做一下简介:
移除单个路径
如果仅仅想移除单个路径, 如:”DeepLearnToolbox-master”文件夹.
- 对于绝对路径, 那么只需输入下面的命令
rmpath('D:\Workspace\Matlab\DL\DeepLearnToolbox-master')
- 对于相对路径, 那么需输入下面的命令, 否则, 提示找不到.
rmpath('DeepLearnToolbox-master')
移除多个路径
如果想移除多个搜索路径呢, 如:”DeepLearnToolbox-master”文件夹及其子文件夹, 这里依然借助genpath
.
- 对于绝对路径, 那么只需输入下面的命令
rmpath(genpath('D:\Workspace\Matlab\DL\DeepLearnToolbox-master'))
- 对于相对路径, 那么需输入下面的命令
rmpath(genpath('DeepLearnToolbox-master'))
还有一种方法
修改pathdef.m文件!
到你的MATLAB安装目录中依次找到toolbox -> local -> pathdef.m
文件,如下:
直接删除你不要的路径即可。
这种方法在下面这种情况下很有帮助:当你打开MATLAB窗口时,命令窗口提示一堆Warning,说某某路径不存在或者不是路径(”Warning: Name is nonexistent or not a directory: “),如下图所示:
这往往是由于你移动了文件夹或者重命名了文件夹而致(比如我删除了sd显著性检测文件夹),而这个时候你打开Set Path
(Home -> Set Path
)窗口并没有看到这些路径,是不是很奇怪,其实不奇怪,路径不存在添加进去也没有,所以就不添加了。
解决办法就是修改上述pathdef.m文件,打开后,你会发现文件里依然保留着那些不存在的路径,删掉即可;当然也可以把文件夹命名回来,或移动回来。
哈哈,就这些吧!