为什么我得到NameError:名称'array'未定义

时间:2013-03-23 10:55:58

标签: python nameerror spyder

我正在使用spyder并编写了以下类:

class Ray:

    def __init__(self, r, p, k):

        if r.shape == (3,):
            self.r = r
        if p.shape == (3,):
            self.p = p
        if k.shape == (3,):
            self.k = k

r = array(range(3))
p = array(range(3))
k = array(range(3))

它存储在/ home / user / workspace / spyder / project中,控制台工作目录就是那个。在控制台中,我可以运行一个数组(范围(3)),它返回一个值为0,1,2的数组。但是在做的时候

import ray

我收到以下错误

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "ray.py", line 8, in <module>
    class Ray:
  File "ray.py", line 20, in ray
    r = array(range(3));
NameError: name 'array' is not defined

修改

默认情况下spyder有以下行为,不太明白为什么array()默认工作原理我以为它只是numpy的一部分。

import numpy as np  # NumPy (multidimensional arrays, linear algebra, ...)
import scipy as sp  # SciPy (signal and image processing library)

import matplotlib as mpl         # Matplotlib (2D/3D plotting library)
import matplotlib.pyplot as plt  # Matplotlib's pyplot: MATLAB-like syntax
from mayavi import mlab          # 3D plotting functions
from pylab import *              # Matplotlib's pylab interface
ion()                            # Turned on Matplotlib's interactive mode

Within Spyder, this intepreter also provides:
    * special commands (e.g. %ls, %pwd, %clear)
    * system commands, i.e. all commands starting with '!' are subprocessed
      (e.g. !dir on Windows or !ls on Linux, and so on)

1 个答案:

答案 0 :(得分:7)

您需要from numpy import array

这是由Spyder控制台为您完成的。但是在一个程序中,你必须做必要的进口;例如,优点是您的程序可以由没有Spyder的人运行。

我不确定Spyder默认为您导入的内容。可以通过array或通过from pylab import *等效导入from numpy import *。如果您想直接将代码从Spyder控制台复制到程序,则可能需要from numpy import *甚至from pylab import *。但是,它是officially not recommended to do this in a program,因为这污染了程序的命名空间;做import numpy as np然后np.array(…)是习惯做法。