2016-03-01 2 views
3

Я пытаюсь использовать метод numpy под названием searchsorted, но я не могу заставить его работать.searchsorted - глобальное имя «x» не определено

Это код:

class Object(QMainWindow): 
    def __init__(self): 
    QMainWindow.__init(self) 

    self.figure_canvas = FigureCanvas(Figure()) 
    self.axes = self.figure_canvas.add_subplot(111) 

    x = np.arange(0.0, 5.0, 0.01) 
    y = np.sin(2*np.pi*x) + 0.5*np.random.randn(len(x)) 
    self.axes.plot(x, y, "-", picker = 5) 
    self.axes.set_ylim(-2, 2) 

    def onselect(xmin, xmax): 
    indmin, indmax = np.searchsorted(x, (xmin, xmax) 

и, когда я пытаюсь построить этот код, я получаю сообщение об ошибке, которая говорит:

NameError: global name 'x' is not defined

В чем проблема? Я определил x, который я хочу использовать, но он говорит, что это не так.

Надеюсь, вы можете мне помочь.

+0

Существует недостающее ')'. –

+0

Переменная x просто объявлена ​​в __init__ funtion, но не видна onselect() –

ответ

2

Вы только определите локальную переменную x в рамках вашей функции __init__(), поэтому ее нельзя получить за пределами этой области.

Если вместо того, чтобы установить x быть экземпляр атрибута с помощью self.x вы сможете получить к нему доступ в методе onselect() класса, опять-таки с помощью self.x:

class Object(QMainWindow): 
    def __init__(self): 
    QMainWindow.__init(self) 

    self.figure_canvas = FigureCanvas(Figure()) 
    self.axes = self.figure_canvas.add_subplot(111) 

    self.x = np.arange(0.0, 5.0, 0.01) 
    y = np.sin(2*np.pi*x) + 0.5*np.random.randn(len(x)) 
    self.axes.plot(x, y, "-", picker = 5) 
    self.axes.set_ylim(-2, 2) 

    def onselect(self, xmin, xmax): 
    indmin, indmax = np.searchsorted(self.x, (xmin, xmax) 
+0

Педантично, 'x' является атрибутом экземпляра, а не атрибутом класса. – Gerrat

+0

Я пробовал это. Когда я пишу 'self.x', я должен поместить его так же в' y'variable и в 'self.axes.plot()'. Но в это время я получаю сообщение об ошибке: 'Name Error: global'self 'не определен' –

+0

@PabloFlores гарантирует, что' onselect() 'является методом класса, определяя его внутри вашего класса и передавая ему аргумент' self' – gtlambert

1

В onselect() Funtion там ира нет й значения объявлен

Попробуйте это:

def __init__(self): 
    ... 
    self.x = np.arange(0.0, 5.0, 0.01) 

def onselect(xmin, xmax): 
    indmin, indmax = np.searchsorted(self.x, (xmin, xmax) 
2

Вы определили x в методе __init__. Ваш onselect не имеет x определен

Если вы хотите использовать что x в других методах этого экземпляра, вы можете сделать

self.x = np.arange(0.0, 5.0, 0.01) # this is in __init__ 

Тогда в onselect вы можете ссылаться на него, используя self.x

Смежные вопросы