% matplotlib line magic вызывает SyntaxError в скрипте Python

Я пытаюсь запустить следующие коды на Spyder (Python 2.7.11):

# -*- coding: utf-8 -*-

import numpy as np
import pandas as pd

%matplotlib inline

import matplotlib.pyplot as plt
import matplotlib.cm as cm

import tensorflow as tf

# settings
LEARNING_RATE = 1e-4
# set to 20000 on local environment to get 0.99 accuracy
TRAINING_ITERATIONS = 2000        

DROPOUT = 0.5
BATCH_SIZE = 50

# set to 0 to train on all available data
VALIDATION_SIZE = 2000

# image number to output
IMAGE_TO_DISPLAY = 10

Но я получил эту ошибку:

line 10
    %matplotlib inline
    ^
SyntaxError: invalid syntax.

Я ценю, если кто-нибудь даст мне объяснение.

PS код из проекта конкурса Kaggle: Digit Recognizer

Ответы

Ответ 1

Линейные магии поддерживаются только командной строкой IPython. Они не могут просто использоваться внутри скрипта, потому что %something не соответствует синтаксису Python.

Если вы хотите сделать это из сценария, вам нужно получить доступ к API-интерфейсу IPython, а затем вызвать функцию run_line_magic.

Вместо %matplotlib inline вам нужно будет сделать что-то подобное в своем скрипте:

from IPython import get_ipython
get_ipython().run_line_magic('matplotlib', 'inline')

Подобный подход описан в этом ответе, но он использует устаревшую magic функцию.

Обратите внимание, что сценарий по-прежнему должен выполняться в IPython. Под ванильным Python функция get_ipython возвращает None и get_ipython().run_line_magic будет поднимать AttributeError.

Ответ 2

Поскольку магии строк поддерживаются только командной строкой IPython, а не Python cl, используйте: 'exec(%matplotlib inline)' вместо %matplotlib inline

Ответ 3

Синтаксис "%" в %matplotlib inline распознается iPython (где он настроен для обработки магических методов), но не сам Python, который выдает SyntaxError. Здесь дано одно решение.

Ответ 4

Если вы matplotlib следующий код в начало вашего скрипта, matplotlib будет запускаться встроенным, когда в среде IPython (например, jupyter, plug-in...), и он будет работать, если вы запустите скрипт напрямую через командную строку (matplotlib не будет запущена в линию, и диаграммы откроются во всплывающих окнах, как обычно).

from IPython import get_ipython
ipy = get_ipython()
if ipy is not None:
    ipy.run_line_magic('matplotlib', 'inline')

Ответ 5

Есть несколько причин, почему это не сработает.

Возможно, что matplotlib установлен неправильно. вы пробовали работать:

conda install matplotlib

Если это не работает, посмотрите на переменную окружения% PATH%, содержатся ли в ней библиотеки и пути python?

Аналогичная проблема для github anaconda

Ответ 6

Это тот случай, когда вы используете Джулию:

Аналогом IPython% matplotlib в Julia является использование пакета PyPlot, который предоставляет интерфейс Julia для Matplotlib, включая встроенные графики в записных книжках IJulia. (Эквивалент numpy уже загружен по умолчанию в Julia.) Учитывая PyPlot, аналог встроенного% matplotlib использует PyPlot, поскольку PyPlot по умолчанию использует встроенные графики в IJulia.

Ответ 7

Вместо% matplotlib inline это не скрипт python, поэтому мы можем писать так, как он будет работать из импорта IPython get_ipython get_ipython(). Run_line_magic ('matplotlib', 'inline')