Numpy: RuntimeWarning: обнаружено переполнение - PullRequest
0 голосов
/ 11 ноября 2018

Мой друг прислал мне код, включая пакеты numpy, functools и matplotlib, которые отлично работают в его системе Windows и не вызывают никаких предупреждений / исключений. Тот же код не работает в моей системе, я получаю много значений "-inf" или "nan", которые не получает мой друг.

Когда я запускаю один и тот же код на моем MacBook (OS X 10.14), python 3.6 и тех же установленных пакетах, я получаю следующие ошибки:

/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/numpy/linalg/linalg.py:2022: RuntimeWarning: overflow encountered in det
  r = _umath_linalg.det(a, signature=signature)
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/ipykernel_launcher.py:90: RuntimeWarning: invalid value encountered in multiply
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/ipykernel_launcher.py:94: RuntimeWarning: invalid value encountered in multiply
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/numpy/linalg/linalg.py:2022: RuntimeWarning: invalid value encountered in det
  r = _umath_linalg.det(a, signature=signature)
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/ipykernel_launcher.py:99: RuntimeWarning: invalid value encountered in multiply
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/ipykernel_launcher.py:76: RuntimeWarning: divide by zero encountered in log`

Я также заметил, что, когда я пытаюсь выполнить "pip install functools", я получаю некоторые сообщения об ошибках, которые мне не понятны. Может ли быть так, что новое обновление Mojave уничтожило что-то в моей системе?

/usr/bin/clang -fno-strict-aliasing -Wsign-compare -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -arch i386 -arch x86_64 -g -I/Library/Frameworks/Python.framework/Versions/3.6/include/python3.6m -c src/functools.c -o build/temp.macosx-10.6-intel-3.6/src/functools.o
    src/functools.c:43:6: warning: implicit declaration of function 'Py_InitModule3' is invalid in C99 [-Wimplicit-function-declaration]
            m = Py_InitModule3("_functools", NULL, functools_doc);
                ^
    src/functools.c:43:6: warning: this function declaration is not a prototype [-Wstrict-prototypes]
    src/functools.c:43:4: warning: incompatible integer to pointer conversion assigning to 'PyObject *' (aka 'struct _object *') from 'int' [-Wint-conversion]
            m = Py_InitModule3("_functools", NULL, functools_doc);
              ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    src/functools.c:45:3: error: non-void function 'init_functools' should return a value [-Wreturn-type]
                    return;
                    ^
    src/functools.c:49:2: error: non-void function 'init_functools' should return a value [-Wreturn-type]
            return;
            ^
    3 warnings and 2 errors generated.
    error: command '/usr/bin/clang' failed with exit status 1

Command "/Library/Frameworks/Python.framework/Versions/3.6/bin/python3 -u -c "import setuptools, tokenize;__file__='/private/var/folders/hg/qhfjf8mn647dsz9p4c85j0z40000gn/T/pip-install-nek3bgo1/functools/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /private/var/folders/hg/qhfjf8mn647dsz9p4c85j0z40000gn/T/pip-record-6vakus33/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /private/var/folders/hg/qhfjf8mn647dsz9p4c85j0z40000gn/T/pip-install-nek3bgo1/functools/`

РЕДАКТИРОВАТЬ: просто, чтобы сделать это более ясным, я не только получаю сообщения об ошибках, которые не получает мой друг, код вообще не работает в моей системе.

1 Ответ

0 голосов
/ 11 ноября 2018

Две вещи: во-первых, functools является частью стандартной библиотеки Python.Он входит в состав каждого дистрибутива Python, поэтому вам не нужно устанавливать его с pip.Я полагаю, что ошибка, которую вы получаете, заключается в том, что в PyPI все еще есть пакет functools (хранилище, из которого pip выбирает пакеты).Однако в последний раз он обновлялся в 2005 году. Это не functools, который вы хотите.Не беги pip install functools.Вы можете просто сделать import functools в любом коде Python, и импорт должен просто сработать.

Во-вторых, тот факт, что вы получаете предупреждения, когда вашего друга нет, может быть вызван большим количествомразные вещи.Вы должны будете отладить код самостоятельно, чтобы выяснить, что происходит не так.Самый простой способ сделать это - превратить предупреждения в ошибки.Добавьте следующую строку в верхней части скрипта Python, который вы выполняете (после операторов импорта):

np.seterr(all='raise')

Когда эта строка установлена, всякий раз, когда numpy выдаст предупреждение, это вызовет ошибкувместо.Ошибка будет включать в себя трассировку стека, которая приведет к ошибке в вашем собственном коде.Это поможет вам понять, что не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...