2013-03-23 28 views
0

我使用的Spyder和寫了下面的類沒有定義:爲什麼我會得到NameError:名字「數組」

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 /用戶/工作區/ Spyder的/項目控制檯的工作目錄就是那個。在控制檯中,我可以運行一個數組(範圍(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的有以下行爲,實在不明白爲什麼陣列()的工作原理是默認我認爲這只是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) 
+0

你錯過了一些進口。 – wRAR 2013-03-23 10:58:45

+0

附註:爲了遵循PEP 8,我用大寫字母開始了你的類名,我在'__init __()'參數之間加了空格。我也刪除了不必要的結尾「;」並且讓「Ray」成爲一種新式的課程。 (好吧,那是在你再次編輯它之前,你可能想考慮把我的改進放回去) – EOL 2013-03-23 11:09:40

+0

'from pylab import *'的註釋是錯誤的:它在內部從'numpy import *'中執行。 – wRAR 2013-03-23 11:59:22

回答

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(…)

+0

編輯了答案,以顯示默認spyder導入的內容。我感到困惑的是,因爲spyder已經導入了numpy,爲什麼它不起作用?另外,如果我使用np.array而不是數組, – evan54 2013-03-23 11:12:09

+0

執行'import numpy'後,您可以使用'numpy.array()','array()'來訪問array() 。在'從pylab import *'做完'後,你有一個新的導入的'array()',它和NumPy('array == numpy.array'返回'True')完全一樣。 – EOL 2013-03-23 11:14:09

+0

好吧,我很困惑。如果我在腳本中的任何點添加'import numpy as np',它似乎很好。如果我打開一個python解釋器並運行'import numpy as np',然後複製粘貼代碼就可以正常工作。但是,如果我'numpy導入np'然後'從ray導入*'它會返回一個錯誤? – evan54 2013-03-23 17:32:32

相關問題