Python 更新类属性值
我在将值从一个类调用到该类之外的新迭代循环时遇到了一个问题。代码如下所示:(data和newdata是向量)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]
如何解决此问题?问题在于此函数:
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