2016-12-26 8 views
1

Как передать переменную, возвращаемую функцией внутри класса, другой функции внутри этого класса?
Например (реализующей линейной регрессии):Передача переменной между функциями внутри класса

class ForwardPropagation(object): 
    def __init__(self, xs, realoutput): 
     self.xs = np.asarray(xs) 
     self.realoutput = np.asarray(realoutput) 
     self.guess_slope = random.randint(1,10) 
     self.guess_b = random.randint(1,10) 
     self.guess_output = (self.guess_slope * self.xs) + self.guess_b 

    def distance(self):#returns np.array with distance results 
     abs_D = self.realoutput - self.guess_output 
     D_sqr = abs_D ** 2 
     return abs_D, D_sqr 

    def error(self): 
     sigma = np.sum(D_sqr) 
     mean_error = sigma/len(D_sqr) 
     return mean_error 

Как я могу передать переменную D_sqr, которая является квадрат моей функции расстояния, в функции ошибки?

+2

Ошибка в вашей дистанционной функции - она ​​никогда не вернет D_sqr, так как она будет разбита на первый оператор возврата. Если вы хотите вернуть оба D_sqr и abs_D, вы можете вернуть их как кортеж, например: 'return abs_D, D_sqr' – nrlakin

+0

В функции расстояния у вас не может быть двух возвратов, второй возврат не будет выполнен. – Octo

ответ

3

Вам не нужно передать что-нибудь, когда вы можете назвать другую функцию

def distance(self):#returns np.array with distance results 
    abs_D = self.realoutput - self.guess_output 
    D_sqr = abs_D ** 2 
    return abs_D, D_sqr 

def error(self): 
    abs_D, D_sqr = self.distance() 
    sigma = np.sum(D_sqr) 
    mean_error = sigma/len(D_sqr) 
    return mean_error 

Или вы могли бы пересчитать повторно

def error(self): 
    abs_D = self.realoutput - self.guess_output 
    D_sqr = abs_D ** 2 
    sigma = np.sum(D_sqr) 
    mean_error = sigma/len(D_sqr) 
    return mean_error 
0

переменных Использование класса

self.D_sqr = D_sqr 

И по ошибке:

sigma = np.sum(self.D_sqr)