Octave isnan: не определена ошибка при использовании oct2py - PullRequest
1 голос
/ 22 марта 2019

Использование oct2py для вызова corrcoef.m на нескольких (10MM +) размерных фреймах для возврата матриц [R, P] для генерации обучающих наборов для алгоритма ML.Вчера у меня это работало без проблем.Сегодня утром запустил скрипт с вершины, возвращая идентичный набор тестов для передачи в Octave через oct2py.

Меня возвращают:

Oct2PyError: Octave evaluation error:
error: isnan: not defined for cell
error: called from:
corrcoef at line 152, column 5
CorrCoefScript at line 1, column 7

Во-первых, в наборе нет значений null / nan.На самом деле, нет даже нулей.Ни в одном столбце нет однородности, так что стандартное отклонение не возвращается при вычислении corrcoef.Это математически нормально.

Во-вторых, когда я загружаю набор тестов в Octave через GUI и выполняю те же .m на тех же данных, ошибки не возвращаются, а матрицы [R, P] идентичнысохраненные результаты с прошлой ночи.Я проверил, правильно ли передается матрица var в Octave через oct2py, а Octave получает идентичную матрицу.Однако oct2py больше не может выполнять ANY .m с проверкой nan в исходном коде.Вышеприведенная ошибка возвращается для любого упакованного сценария .mave в Octave, который в любой момент содержит .isnan.

Для s & g я изменил свой .m, чтобы получить матрицу var и записать ее в плоский файл следующим образом:

csvwrite ('filename', data);

Это также не с ошибкой fprintf;если я запускаю один и тот же код в том же наборе данных внутри Octave GUI, он работает нормально.

Я в недоумении.Я обновил conda, oct2py и Octave с теми же результатами.Опять же, точный код с точными данными работал, как и ожидалось, менее чем за 24 часа.

Я использую приведенный ниже код в блокноте Jupyter для проверки:

%env OCTAVE_EXECUTABLE = F:\Octave\Octave-5.1.0.0\mingw32\bin\octave-cli-5.1.0.exe
import oct2py
from oct2py import octave

octave.addpath('F:\\FinanceServer\\Python\\Secondary Docs\\autotesting\\atOctave_Scripts');
data = x
octave.push('data',data)
octave.eval('CorrCoefScript')
cmat = octave.pull('R')
enter code here

Примечание: у меня есть эта проблема только внутри конкретного скрипта .ipynb.Из-за некоторой удачи другие скрипты, использующие oct2py, похоже, не пострадали.

1 Ответ

1 голос
/ 22 марта 2019

Исправлено, но генерирует больше вопросов, чем ответов.Я использовал список фреймов данных для цикла по типу, так что для каждой итерации i, x генерировалось через x = dflst[i].По независящим от меня причинам это не удалось с течением времени.Однако, записав мой цикл в пользовательскую функцию и явно вызвав каждый фрейм данных в этой функции следующим образом: oct_func(type1df) Я вижу ожидаемое поведение и желаемый результат.Однако я все еще не могу использовать цикл для передачи фреймов данных в oct_func().Таким образом, это решение, которое поможет мне в моих целях, но, к сожалению, не может масштабироваться.

Редактировать: Цикл работает нормально, если перебирать набор данных, а не список.

...