web-dev-qa-db-ja.com

%matplotlibラインマジックにより、PythonスクリプトでSyntaxErrorが発生する

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.

誰かが私に説明をしてくれれば感謝しています。

追伸コードはKaggleコンペティションプロジェクトのDigit Recognizerからのものです

40
John

ラインマジックは、IPythonコマンドラインでのみサポートされます。 %somethingは正しいPython構文ではないため、単純にスクリプト内で使用することはできません。

スクリプトからこれを行うには、IPython APIにアクセスし、run_line_magic関数を呼び出す必要があります。

%matplotlib inlineの代わりに、スクリプトで次のようにする必要があります。

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

同様のアプローチは この回答 で説明されていますが、非推奨のmagic関数を使用しています。

スクリプトはまだIPythonで実行する必要があることに注意してください。Vanilla Pythonの下で、get_ipython関数はNoneget_ipython().run_line_magicAttributeErrorを発生させます。

51
kazemakase

ラインマジックはPython clではなくIPythonコマンドラインでのみサポートされているため、%matplotlib inlineの代わりに'exec(%matplotlib inline)'を使用してください。

7
Abraham Sanchez

%matplotlib inlineの構文 '%'はiPython(マジックメソッドを処理するように設定されている)によって認識されますが、SyntaxErrorを生成するPython自体は認識されません。 ここに1つのソリューションがあります。

5
Silvia07

スクリプトの先頭に次のコードを含めると、matplotlib環境(jupyter、水素atomプラグインなど)でIPythonがインラインで実行されます。コマンドラインから直接スクリプトを起動した場合でも引き続き機能します(matplotlibはインラインで実行されず、チャートは通常どおりポップアップで開きます)。

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

これが機能しない理由にはいくつかの理由があります。

Matplotlibが正しくインストールされていない可能性があります。実行してみましたか:

conda install matplotlib

それがうまくいかない場合は、%PATH%環境変数を見てください。ライブラリとpythonパスが含まれていますか?

github anacondaの同様の問題

1
GLaDOS

これは、Juliaを使用している場合です。

JuliaのIPythonの%matplotlibの類似物は、PyPlotパッケージを使用することです。これにより、IJuliaノートブックのインラインプロットを含むMatplotlibへのJuliaインターフェースが提供されます。 (numpyに相当するものは、デフォルトでJuliaに既にロードされています。)PyPlotはIJuliaのインラインプロットにデフォルト設定されているため、%matplotlib inlineのアナログはPyPlotを使用しています。

0