• Matlab: 路径的操作


    添加相对路径

    在matlab中当代码很多时常常将结果存在不同的文件夹下面,常常使用相对路径对函数进行调用,但有时会存在问题。举个栗子:
    代码结构如下:
    /codes/A/AA/code1.m
    /codes/A/lib_A/lib1.m
    /codes/B/BB/code2.m
    /codes/B/lib_B/lib2.m
    代码的依赖关系如下:
    code1.m 依赖lib1.m
    code2.m 依赖lib2.m和code1.m
    小麻雀栗子如下:
    code1.m

    function code1(a,b)
    addpath('../lib_A/');
    c=[a,b];
    lib1(c);
    end
    

    lib1.m

    function lib1(string_name)
    print(string_name);
    end
    

    lib2.m

    function str_name=lib2(number_name)
    str_name=['00',num2str(number_name)];
    end
    

    code2.m

    addpath('../lib_B/');
    shot1=12345;
    shot2=39045;
    str1=lib2(shot1);
    str2=lib2(shot2);
    addpath('../../A/AA/');
    code1(str1,str2);
    

    测试运行结果:
    意料之外的,会出现报错:

    Undefined function or variable 'lib1'.
    
    Error in code1 (line 5)
    lib1(c);
    

    出现这个错误的原因是运行的文件code2.m位于/code/B/BB/位置,这个是进行相对路径搜索的原点。
    通过执行addpath('../lib_B/')可以正确的加载lib2.m,运行addpath('../../A/AA')也可以正确的地加载code1.m
    但是在调用code1.m的过程,运行这句加载语句却出现了错误,addpath('../lib_A/');

    这是因为虽然我们已经调用了code1.m但是此时的搜索原点仍然是以主调函数code2.m为基准的。相当于在/code/B/BB/的路径下addpath('../lib_A/'),这样自然找不到lib1.m。
    要解决这个问题,可以在code2.m的文件中添加lib1.m所在的位置。addpath('../../A/lib_A/'),这样就可以正确的运行code2.m了。

    当然,这个解决方法并不是很令人满意,因为每次从外部调用函数的时候,都要额外添加该函数所依赖的路径。如果可以使被叫函数自动根据自己的位置调用自身所依赖的路径,那么一定会方便很多。如果园子里的大神有什么解决方案,欢迎留言支招。

  • 相关阅读:
    django DEBUG=False
    Lftp 简单使用步骤
    django admin管理后台中文添加问题
    Rsync同步设置的一例
    在nginx中,禁止IP访问.只可以使用域名访问.
    python imaplib无痕取信的主要
    Centos安装配置Postfix邮件服务器--网址
    还没有写完准备弡上cpickle 还有字典
    python 截取某一天的日志,简单操作
    abp 关闭审计日志
  • 原文地址:https://www.cnblogs.com/docnan/p/6932294.html
Copyright © 2020-2023  润新知