2

我是 Python 新手。我一直在努力让自己熟悉 Numpy、Scipy 和 Matplotlib,因为我有科学背景,并希望让自己成为在神经科学实验室工作的更有竞争力的候选人。

我一直在浏览 Matplotlib 文档,尝试通过示例学习。我将从以下 URL 中引用一个示例:http: //matplotlib.org/users/pyplot_tutorial.html

我的印象是这些示例是用 Python 3.x 编写的,并且我遇到了麻烦,因为我使用的是 Python 2.7。我正在使用 2.7,因为我想要的一些库不适用于 3.x。

该网站给出了使用子图的示例。他们的代码如下:


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”与函数“f(t)”分开定义。

我的第二个也是主要问题:有人可以解释为什么必须单独定义“f”吗?如何在 Python 2.7 中正确使用这样的函数?

如果有人需要我解释这里使用的 Numpy/Matplotlib 机制,我会尽我所能解释它们是如何产生图表的。

4

3 回答 3

5

对于语法错误,请检查之前的一两行。t1是一个完全有效的变量名(规则类似于其他各种语言:变量名可以包含字母、数字和_,但不能以数字开头) - 但是如果您忘记了上面的右括号或类似内容,那么解释器会感到困惑,并告诉您那里不能有赋值语句(如果换行符在里面(){}或者[],或者换行符之前的最后一个字符是,则换行符不算作“语句结束” \)。

定义一个函数确实会在该名称空间中为您提供一个具有该名称的变量 - 您无需f单独定义。如果没有看到您的确切代码很难判断,但可能发生的情况是您在不同的范围内定义了它(因此名称不可见),或者您将函数重命名为f.

于 2013-03-15T06:09:25.497 回答
0

尝试在新窗口中再次输入所有内容。'f' 不应该单独定义。

于 2013-03-15T06:10:45.097 回答
0

由于缺少新行和意外缩进而出现无效语法接缝的错误。

在 IDLE 中,定义函数 f(t) 后,您必须再次按下<return>以完成 f(t) 的声明 - 在 f(t) 的声明后放置一个空行。如果你不在 IDLE 中添加额外的新行,你会得到一个语法错误,因为意外的缩进和 f(t) 的定义不会完成,所以你也会得到下一个错误,说 'f ' 没有定义。

于 2013-03-15T16:37:17.487 回答