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

eva*_*n54 0 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))
Run Code Online (Sandbox Code Playgroud)

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

import ray
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

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
Run Code Online (Sandbox Code Playgroud)

编辑:

默认情况下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)
Run Code Online (Sandbox Code Playgroud)

Eri*_*got 8

你需要from numpy import array.

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

我不确定Spyder默认为你导入什么.array可以通过from pylab import *或通过等效方式导入from numpy import *.如果您想直接将代码从Spyder控制台复制到程序,您可能需要from numpy import *甚至是from pylab import *.不过,官方不建议在程序中执行此操作,因为这会污染程序的命名空间; 做import numpy as np,然后np.array(…)是习惯.