Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么获取名称错误:未定义名称“array”_Python_Nameerror_Spyder - Fatal编程技术网

Python 为什么获取名称错误:未定义名称“array”

Python 为什么获取名称错误:未定义名称“array”,python,nameerror,spyder,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(ra

我使用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中,控制台工作目录就是这个目录。在控制台中,我可以运行arrayrange3,它返回一个值为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
您需要从numpy导入数组中获取

这是由Spyder控制台为您完成的。但在程序中,必须进行必要的导入;例如,您的程序可以由没有Spyder的人运行

我不确定Spyder默认为您导入了什么。数组可以通过从pylab导入*导入,也可以等效地通过从numpy导入*。如果要将代码从Spyder控制台直接复制到程序,可能需要从numpy import*甚至从pylab import*进行复制。但是,这会污染程序的名称空间;通常先将numpy导入为np,然后再导入np.array…。

您需要从numpy导入数组

这是由Spyder控制台为您完成的。但在程序中,必须进行必要的导入;例如,您的程序可以由没有Spyder的人运行


我不确定Spyder默认为您导入了什么。数组可以通过从pylab导入*导入,也可以等效地通过从numpy导入*。如果要将代码从Spyder控制台直接复制到程序,可能需要从numpy import*甚至从pylab import*进行复制。但是,这会污染程序的名称空间;按照惯例,先导入numpy,然后导入np.array…。

您会错过一些导入。旁注:为了遵循PEP 8,我用大写字母开头了您的类名,我在_init________参数之间加了空格。我也删除了不必要的结尾;让雷成为一个新的班级。那是在你再次编辑之前。您可能想考虑将我的改进放回原处。Pylab导入的注释是错误的:它是从NUMPY导入*内部的。您错过了一些导入。请注意:为了遵循PEP 8,我用大写字母开头您的类名,我在y-In ITITY参数之间放置空格。我也删除了不必要的结尾;让雷成为一个新的班级。那是在你再次编辑之前。您可能想考虑将我的改进放回原处。来自PyLabIPub的注释是错误的:它是从NUMPY导入*内部编辑的。但我感到困惑的是,既然spyder已经进口了numpy,为什么它不起作用?另外,如果我使用np.array而不是array,也没有什么区别。在执行import numpy之后,您可以使用numpy.array、no array访问array函数。从pylab import*执行后,您有一个新的导入数组,它与NumPy的数组==NumPy.array返回True完全相同。好的,我很困惑。如果我在脚本中的任何一点将import numpy添加为np,似乎都没有问题。如果我打开一个python解释器,以np的形式运行import numpy,然后复制粘贴代码,它就可以正常工作了。但是,如果我将numpy作为np导入,然后从ray导入*返回一个错误?好的,我想我已经解决了。。基本上每个模块都需要导入一些东西。。。如果我错了,请纠正我..是的,每个模块都有自己的名称空间。因此,如果希望在模块中定义数组,则需要在模块内部定义它,例如,可以使用from numpy import array,或者在导入numpy之后使用numpy.array。这种导入所有必要模块的方法的优点是,它使每个模块独立。相同的模块可用于许多不同的项目,而不必考虑项目的其他部分是否导入了所需的对象。编辑答案以显示spyder默认导入的内容。但我感到困惑的是,既然spyder已经进口了numpy,为什么它不起作用?另外,如果我使用np.array而不是array,也没有什么区别。在执行import numpy之后,您可以使用numpy.array、no array访问array函数。从pylab import*执行后,您有一个新的导入数组,它与NumPy的数组==NumPy.array返回True完全相同。好的,我很困惑。如果我在脚本中的任何一点将import numpy添加为np,似乎都没有问题。如果我打开一个python解释器,以np的形式运行import numpy,然后复制粘贴代码,它就可以正常工作了。但是,如果我将numpy作为np导入,然后从ray导入*返回一个错误?好的,我想我已经解决了。。基本上每个模块都需要导入一些东西。。。如果我错了,请纠正我..是的,每个模块都有自己的名称空间。因此,如果希望在模块中定义数组,则需要在模块内部定义它,例如,可以使用from numpy import array,或者在导入numpy之后使用numpy.array。这种导入所有必要模块的方法的优点是,它使每个模块独立,并且可以使用相同的模块 在许多不同的项目中,不必考虑项目的其他部分是否导入了所需的对象。
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)