我在一个项目中,我想排序与数据点(克隆)和ID的列表列表到一个不同的列表。需要说明的是,所需的格式是clusters[id,data[]。数据是一个包含8个数据点的列表。我现在的列表格式是clusterData[clusterId,…],以及一个id和集群的列表,比如clusterResultData[cloneId,clusterId]。你知道吗
分拣过程如下:
for i in range(len(clusterResultData)):
clusterId = int(clusterResultData[i][1])
clusters[clusterId].append(clusterData[i])
它的输出是一个带有格式集群[clusterId,data[cloneId,…]的列表。 但是,每个“簇”都充满了~1000个数据点,而这些数据点应该划分在簇上。你知道吗
如果有帮助,下面是完整的代码:
clusterResultData = []
clusterData = []
clusterIdList = []
with open("Voorbeeld_clusterresult.txt", "r") as resultFile:
i = 0
for line in resultFile: #doorloopt alle regels in het bestand
if len(line) != 0:
clusterResultData.append(line.split()) #maakt een list met [cloneId, clusterId] voor elke clone
clusterIdList.append(clusterResultData[i][1])
i += 1
amOfClusters = len(set(clusterIdList)) #aantal unieke clusterIds
clusters = amOfClusters * [['']]
with open("Voorbeeld_clusterdata.txt", "r") as resultFile:
i = 0
for line in resultFile:
if len(line) != 0:
clusterData.append(line.split()) #maakt een list met [cloneId, clusterId] voor elke clone
#print clusterData[i], clusterResultData[i]
i += 1
for i in range(len(clusterResultData)):
clusterId = int(clusterResultData[i][1])
clusters[clusterId].append(clusterData[i])
for i in range(amOfClusters):
print i, clusters[i][1] #test, every cluster is exactly identical
下面是两个包含数据的txt文件的结构:
沃比尔德_clusterdata.txt文件地址:
846160 0.388 0.329 0.69 0.9 0.626 0.621 0.399 0.37
820434 -0.296 -0.503 -0.454 -0.868 -0.721 -0.918 -0.486 -0.582
849103 -0.246 -0.935 -0.277 -0.175 -0.278 -0.075 -0.236 -0.417
...
沃比尔德_clusterresult.txt文件地址:
846160 1
820434 5
849103 4
...
问题出在生成
clusters
的行上:这将创建一个列表,其中
amOfClusters
引用了相同的子列表。将项添加到任何索引的子列表时,到处都会看到更改:为了解决这个问题,你需要为每个索引创建一个新的列表。使用^{} 可以很容易地做到这一点:
如果将代码中的行更改为以下行,则应获得预期的行为:
相关问题 更多 >
编程相关推荐