2016-06-29 5 views
0

Итак, у меня есть довольно сложная функция matlab (она вызывает симуляцию, которая, в свою очередь, вызывает внешний набор оптимизации (cplex или gurobi)). И для определенных настроек и входов функция MATLAB и функция python, вызванная из Matlab, дают одинаковый результат, но для других они отличаются (правильный ответ - 4500). Python иногда возвращает 0.015 ... или 162381, поэтому широко меняющиеся результаты я не могу определить шаблон или корреляцию.Нечетные результаты функции MATLAB, вызванные в python

Мое предположение было бы либо с преобразованием int/float/double variable, либо с некоторой проблемой памяти. Результат приходит прямо из CPLEX, поэтому я немного смущен, почему он меняется.

На стороне примечания, если я возвращаю структуру, которая содержит структуру массивов, которая убивает ядро ​​python. Это делает отладку с python немного сложнее (у меня установлен pymatbridge и metakernel)

У кого-нибудь были похожие проблемы с ненадежными функциями matlab в python? Идеи решения, отличные от того, выполняются ли они из консоли и читаются в файле результатов?

ответ

0

Оказывается, что иногда код будет работать, если некоторые переменные не указаны как double, а в других случаях это целочисленное деление или что нет, результаты ложных результатов. Я понятия не имею, как это соотносится с входом, поскольку это действительно не должно, но я просто пошел и указал, что все переменные в соответствующем разделе кода будут удваиваться и что это исправлено. Таким образом,

tl; dr: Даже если он работает, просто соблюдайте все переменные, удваивая, и проблема решена.

Действительно что-то Mathworks должны исправить их Python API

+0

Я не идея, если это поможет в вашем случае, но если вы еще не знали об этом, вы можете посмотреть по адресу://stackoverflow.com/questions/183853/in-python-what-is-the-difference-between-and-when-used-for-division. В частности, использование 'from __future__ import division' может защитить от таких проблем в Python> = 2.2 (в вашем коде, возможно, не в этом пакете Mathworks). – rkersh

+0

Я уже использовал 'из __future__ import division', поскольку я подозревал, что это вызовет проблемы. Как указано, просто штукатурка всех переменных в double() в Matlab исправила проблему, хотя, если она была выполнена в MATLAB, переменные уже были удвоены, а код выполнялся в Python. Я подозреваю, что MATLAB обрабатывает это по-разному внутренне, и это вызывает проблемы с интерфейсом python. Как только я смогу воспроизвести его, я отправлю пример и при необходимости отправлю сообщение об ошибке. –

 Смежные вопросы

  • Нет связанных вопросов^_^