用列表/数组初始化python类

时间:2019-02-07 06:36:27

标签: python class initialization

我无法使用列表初始化课程

这是一个梯度下降问题,我想创建一个带有列表(权重)的对象。

我尝试使用weights = None并将类型从数组更改为列表,但是无论如何,我一直在获取“ numpy.ndarray对象不可调用”的信息。

估计中的数组y已经定义,我刚刚从这里排除了它。

class Point(object):

    def __init__ (self,  weights = None):
        self.weights = weights 
        self.estimate = self.estimate()
        self.loss = self.loss()
        self.cost = self.cost()
        self.gradient = self.gradient()

    def estimate(self):
        estimate = np.dot(y, self.weights)
        return estimate

    def loss(self):
        loss = (self.estimate - target)
        return loss

    def cost(self):
        cost = np.sum(self.loss **2)

    def gradient(self):
        gradient = np.dot(yTrans, self.loss)
        return gradient

    def gradient_descent(self):

        alpha = 0.0001
        self.weights = self.weights - alpha * self.gradient
        return weights

w = [10, 14, 15, 10, 5]
k = Point(w)
k.weights()

我希望k.gradient()返回一个权重数组,但我什至无法初始化该类

2 个答案:

答案 0 :(得分:0)

您的__init__不能按照您想要的方式工作,因为您在__init__方法中使用了关键字参数而不是位置参数,所以应该像def __init__(self, weights)而不是{{ 1}}

这个解决方案如何?

def __init__(self, weights=None)

此外,您可以将列表定义为这样的变量:

point = Point(weights=[10, 14, 15, 10, 5])
print(point.weights)

另一种解决方案,如果您将weights=[10, 14, 15, 10, 5] point = Point(weights=weights) print(point.weights) 更改为__init__,则可以用新的方式创建实例,因为现在def __init__(self, weights)中的参数将定位而不是关键字:

__init__

答案 1 :(得分:-1)

您正在尝试将数组作为函数调用。您需要按以下方式尝试

w = [10, 14, 15, 10, 5]
k = Point(w)
print(k.weights)

当我们有()时,它便成为可调用对象,通常我们将()用于函数和类。对于诸如()等的数据类型,我们不使用int, str, float, list