dnMap, xnMap = filterData(file, filterListData, 30, 200)将代码中的传递闭包聚类算法改为AP聚类算法出现float() argument must be a string or a number, not 'dict'报错
时间: 2023-10-28 14:05:25 浏览: 142
这个错误通常表示代码期望得到一个字符串或数字类型的参数,但实际上传入了一个字典类型的参数。这可能是因为AP聚类算法返回的结果格式与传递闭包聚类算法不同,需要对代码进行相应的修改。
可以尝试将返回的结果转换为列表类型,然后再进行相关操作。具体的修改方式可以参考以下示例代码:
```python
import numpy as np
from sklearn.cluster import AffinityPropagation
def apClustering(data, damping=0.5, max_iter=200, convergence_iter=15, preference=None):
af = AffinityPropagation(damping=damping, max_iter=max_iter, convergence_iter=convergence_iter, preference=preference)
af.fit(data)
cluster_centers_indices = af.cluster_centers_indices_
labels = af.labels_
n_clusters_ = len(cluster_centers_indices)
return n_clusters_, labels.tolist()
def filterData(file, filterListData, threshold1, threshold2):
# 读取数据
data = np.loadtxt(file, delimiter=",")
# 进行数据过滤
filterData = data[np.isin(data[:, 0], filterListData)]
# 将过滤后的数据按照第一列进行分组
groupData = {}
for row in filterData:
key = str(row[0])
value = row[1:]
if key not in groupData:
groupData[key] = []
groupData[key].append(value)
# 对每个分组进行AP聚类,并将结果存储到字典中
result = {}
for key in groupData:
n_clusters, labels = apClustering(groupData[key])
clusters = {}
for i in range(n_clusters):
clusters[i] = []
for i, label in enumerate(labels):
clusters[label].append(groupData[key][i])
result[key] = clusters
# 返回结果
return result
```
在上述代码中,我们将AP聚类算法的结果转换为了列表类型,并将整个结果存储到了字典中。这样可以保证后续操作的顺利进行。如果还有问题,可以贴出完整的代码和报错信息,以便更好地帮助您解决问题。
阅读全文