gpt4 book ai didi

matlab - 使用两个版本的 matlab 代码 - 如何处理路径?

转载 作者:行者123 更新时间:2023-12-05 06:48:39 27 4
gpt4 key购买 nike

我想同时使用同一个 Matlab 软件包的两个版本(我想比较它们的输出以进行测试)。该包会修改路径,以便可以找到子目录中的函数。这似乎有问题,因为包假定它是机器上运行的唯一副本。该路径本质上是一个全局变量,无意中在代码的两个副本之间共享。

示例简化代码结构:

/main_code.m
/compare_results.m
/code_a/somefn.m
/code_a/submethods/
/code_b/somefn.m
/code_b/submethods/

注意somefn.m在路径中添加了submethods目录,依赖路径从submethods文件夹中调用代码。

我想运行的代码示例:

for i = 1:1000000
% Run version A:
result_a = code_a.somefn(i);
% Run version B:
result_b = code_b.somefn(i);
% Compare the output from the two versions:
compare_results(a,b);
end

我能想到的一个解决方案是每次我想切换到不同版本的包时手动更新 Matlab 路径。这似乎是不必要的编码开销,并且可能是一个性能问题(由于经常切换路径)。

另一种解决方案可能是将代码重写为面向对象,以便将函数附加到对象上,并且我可以创建不同版本的对象。这样做的问题是,实际上代码包中包含数百个文件,而我不是原作者,因此重写将是一项艰巨的任务。

(另一种选择是一直更改目录,以便要运行的代码始终在当前目录中。由于子文件夹的数量,这会让人非常头疼,我认为这不是一个严肃的解决方案。它也有潜在的性能开销缺点,类似于总是改变路径。)

有没有更简洁的方法来处理这个问题?我可以以某种方式指定要运行的代码的文件夹吗?怎样设计这样的代码包才能不出现这个问题?

最佳答案

只需创建包,其中可以包含具有相同名称的函数:Packages Create Namespaces

基本上创建两个名为+package1 和+package2 的文件夹。文件夹名称中的“+”很重要。然后将你的函数放在它们下面,比如 foo.m。然后,您可以分别调用每个,而不会弄乱 MATLAB 路径:

>> package1.foo
>> package2.foo

关于matlab - 使用两个版本的 matlab 代码 - 如何处理路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66778279/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com