python 中调用的 MATLAB 函数的奇怪结果
Odd results from MATLAB function called in python
所以我有一个相当复杂的 matlab 函数(它调用一个模拟,模拟又调用一个外部优化套件(cplex 或 gurobi))。对于某些设置和输入,MATLAB 函数和从 Matlab 调用的 python 函数给出相同的结果,但对于其他设置和输入,它们会有所不同(正确答案是 ~4500)python 有时 returns 0.015。 .. 或 162381,结果差异如此之大,我无法找出其中的规律或相关性。
我猜要么是 int/float/double 变量转换,要么是某种形式的内存问题。结果直接来自 CPLEX,所以我不太清楚为什么会发生变化。
附带说明一下,如果我 return 一个包含数组结构的结构,那会杀死 python 内核。这使得从 python 进行调试有点困难(我安装了 pymatbridge 和 metakernel)
有人在 python 中遇到过类似的不可靠 matlab 函数问题吗?除了从控制台执行 matlab 并读取结果文件之外的解决方案想法?
事实证明,如果某些变量未指定为双精度,有时代码会 运行,而在其他情况下,整数除法或其他情况会导致错误结果。我不知道这与输入有什么关系,因为它确实不应该,但我只是去了并将相关代码部分中的所有变量指定为双精度并修复了它。所以
tl;dr:即使它 运行s,只要强制所有变量都是双精度的,问题就解决了。
Mathworks 确实应该在他们的 python api
中解决一些问题
所以我有一个相当复杂的 matlab 函数(它调用一个模拟,模拟又调用一个外部优化套件(cplex 或 gurobi))。对于某些设置和输入,MATLAB 函数和从 Matlab 调用的 python 函数给出相同的结果,但对于其他设置和输入,它们会有所不同(正确答案是 ~4500)python 有时 returns 0.015。 .. 或 162381,结果差异如此之大,我无法找出其中的规律或相关性。
我猜要么是 int/float/double 变量转换,要么是某种形式的内存问题。结果直接来自 CPLEX,所以我不太清楚为什么会发生变化。
附带说明一下,如果我 return 一个包含数组结构的结构,那会杀死 python 内核。这使得从 python 进行调试有点困难(我安装了 pymatbridge 和 metakernel)
有人在 python 中遇到过类似的不可靠 matlab 函数问题吗?除了从控制台执行 matlab 并读取结果文件之外的解决方案想法?
事实证明,如果某些变量未指定为双精度,有时代码会 运行,而在其他情况下,整数除法或其他情况会导致错误结果。我不知道这与输入有什么关系,因为它确实不应该,但我只是去了并将相关代码部分中的所有变量指定为双精度并修复了它。所以
tl;dr:即使它 运行s,只要强制所有变量都是双精度的,问题就解决了。
Mathworks 确实应该在他们的 python api
中解决一些问题