2

私はPythonを初めて使用します。私は科学のバックグラウンドを持っているので、Numpy、Scipy、およびMatplotlibに慣れようとしており、神経科学研究所での仕事のより競争力のある候補になることを望んでいます。

私は例で学ぼうとして、Matplotlibのドキュメントを閲覧してきました。次のURLから例を参照します:http://matplotlib.org/users/pyplot_tutorial.html

これらの例はPython3.xで記述されており、Python 2.7を使用しているため、問題が発生しているという印象を受けます。必要なライブラリの一部が3.xで使用できなかったため、2.7を使用しています。

Webサイトには、サブプロットの使用例が示されています。それらのコードは次のとおりです。


import numpy as np
import matplotlib.pyplot as plt

def f(t):
    return np.exp(-t) * np.cos(2*np.pi*t)

t1 = np.arange(0.0, 5.0, 0.1)
t2 = np.arange(0.0, 5.0, 0.02)

plt.figure(1)
plt.subplot(211)
plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k')

plt.subplot(212)
plt.plot(t2, np.cos(2*np.pi*t2), 'r--')

これは次のような図を返すことになっています:http: //i.stack.imgur.com/ejNDu.png


同じコードをIDLEにコピーすると、エラーが発生します。ライン上

t1 = np.arange(0.0, 5.0, 0.1)

、IDLEは、「t1」は無効な構文であると教えてくれます。

私の最初の質問: t1を変数として使用することの問題は何ですか?

同様のコードをコピーしますが、いくつかの調整を加えることで、このエラーを回避できます。ただし、別のエラーが表示されます。に相当する行を追加すると

plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k')

、IDLEはエラーを表示します:


Traceback (most recent call last):
  File "<pyshell#9>", line 1, in <module>
    plt.plot(ty, f(tx), 'bo', ty, f(ty), 'k')
NameError: name 'f' is not defined

Pythonが関数「f(t)」とは別に「f」を定義することをどのように期待しているかわかりません。

私の2番目の主な質問:「f」を個別に定義する必要がある理由を誰かに説明してもらえますか?Python 2.7でこのような関数を正しく使用するにはどうすればよいですか?

ここで使用されているNumpy/Matplotlibメカニズムについて説明する必要がある場合は、グラフを作成するためにそれらがどのように機能するかを説明するために最善を尽くします。

4

3 に答える 3

5

構文エラーについては、 のの 1 ~ 2 行を確認してください。t1は完全に有効な変数名です (規則は他のさまざまな言語と同様です。変数名には文字、数字、および を含めることができますが、数字で_始めることはできません) - ただし、上記の閉じ括弧などを忘れた場合は、インタープリターは混乱し、代入ステートメントをそこに置くことはできないと伝えます (改行が(),{}または内にある場合[]、または改行の前の最後の文字が である場合、改行は「ステートメントの終わり」としてカウントされません\)。

関数を定義すると、その名前の名前空間に変数f与えられます。個別に定義する必要はありません。正確なコードを見ずに判断するのは困難ですが、発生した可能性があるのは、別のスコープで定義した (名前が表示されない) か、関数の名前を 以外の名前に変更したことですf

于 2013-03-15T06:09:25.497 に答える
0

無効な構文のエラーは、改行の欠落と予期しないインデントのために表示されます。

IDLE では、関数 f(t) を定義した後、f(t) の宣言を終了するためにもう一度押す必要があります<return>- f(t) の宣言の後に空行を置きます。IDLE に新しい行を追加しないと、予期しないインデントが発生して構文エラーが発生し、f(t) の定義が完了しないため、「f」という次のエラーも発生します。 ' 定義されていません。

于 2013-03-15T16:37:17.487 に答える
0

新しいウィンドウで、すべてをもう一度入力してみてください。'f' を個別に定義することは想定されていません。

于 2013-03-15T06:10:45.097 に答える