Python 更新类属性值

Python 更新类属性值,python,Python,我在将值从一个类调用到该类之外的新迭代循环时遇到了一个问题。代码如下所示:(data和newdata是向量) 如何解决此问题?问题在于此函数: def update(self, new_data, delta): for featureset in new_data: distances = [np.linalg.norm(featureset - self.centroids[centroid]) for centroid in self.centroids]

我在将值从一个类调用到该类之外的新迭代循环时遇到了一个问题。代码如下所示:(data和newdata是向量)


如何解决此问题?

问题在于此函数:

def update(self, new_data, delta):
    for featureset in new_data:
        distances = [np.linalg.norm(featureset - self.centroids[centroid]) for centroid in self.centroids]

        if min(distances) < delta:
            classification = distances.index(min(distances))
            self.classifications[classification].append(featureset)
            self.centroids[classification] = np.average(self.classifications[classification], axis=0)
            
        else:
            self.centroids[self.k] = featureset
            self.classifications[self.k] = []
            self.classifications[self.k].append(featureset)   
            self.k = self.k + 1
            k = self.k
def更新(自身、新_数据、增量):
对于新_数据中的特征集:
距离=[np.linalg.norm(featureset-self.centroids[centroid]),用于self.centroids中的形心]
如果最小(距离)<增量:
分类=距离。索引(最小(距离))
self.classification[classification].append(特征集)
自形心[分类]=np.平均值(自形心[分类],轴=0)
其他:
self.centroids[self.k]=特征集
self.classification[self.k]=[]
self.classification[self.k].append(featureset)
self.k=self.k+1
k=自我。k
您仅在“else”块内设置“k”值。忽略任何不相关的内容,看起来是这样的:

def update(self, new_data, delta):
    for featureset in new_data:
        ...
        if min(distances) < delta:
            ...
        else:
            ...
            k = self.k
    print (k)  # <-- error here
    return k  # <-- error here
def更新(自身、新_数据、增量):
对于新_数据中的特征集:
...
如果最小(距离)<增量:
...
其他:
...
k=自我。k

打印(k)#请给出一个有用的示例,以便测试问题。您的
else
语句是否达到了要求?@gold\u cy是的,每次达到else条件时,k都会自动重置为3,但我想要达到的是,如果最小(距离)
,则保持k
的值,为else条件更新k,问题是每次调用类A时,k的值仍然是3,尽管我在else条件中设置了k=self.k。我确信在输入新数据时else条件正在运行。所以,问题是,对于每个新的迭代,k总是等于3,你得到的回溯并不存在。代码的某些部分使您输入“if”块。解决方案不变。在访问k之前,需要设置k的值。如果希望保持“k”始终不变,则需要在“update()”函数中引入一个新变量进行修改。但在使用它之前,它仍然需要设置为一个值。似乎我对每次迭代重置k感到困惑。不幸的是,我不能上传所有的代码,这太长了。不过还是谢谢你。
def update(self, new_data, delta):
    for featureset in new_data:
        distances = [np.linalg.norm(featureset - self.centroids[centroid]) for centroid in self.centroids]

        if min(distances) < delta:
            classification = distances.index(min(distances))
            self.classifications[classification].append(featureset)
            self.centroids[classification] = np.average(self.classifications[classification], axis=0)
            
        else:
            self.centroids[self.k] = featureset
            self.classifications[self.k] = []
            self.classifications[self.k].append(featureset)   
            self.k = self.k + 1
            k = self.k
def update(self, new_data, delta):
    for featureset in new_data:
        ...
        if min(distances) < delta:
            ...
        else:
            ...
            k = self.k
    print (k)  # <-- error here
    return k  # <-- error here