Python 附加列表有时给出';索引器:列表索引超出范围';错误并导致不符合预期的结果
因此,我对使用python-2.7编程并尝试实现集群问题的初始化方法还是新手。Python 附加列表有时给出';索引器:列表索引超出范围';错误并导致不符合预期的结果,python,python-2.7,pandas,cluster-analysis,Python,Python 2.7,Pandas,Cluster Analysis,因此,我对使用python-2.7编程并尝试实现集群问题的初始化方法还是新手。 这些步骤是: 从数据集中选择一个随机数据作为第一个质心 当质心中的数据数量
这些步骤是:
a
到b
的随机整数,包括b
。因此,当您使用randint(0,len(x))
时,可能会将值len(x)
作为输出,当用作索引时,该值超出范围
对于您的用例,您可能可以使用random\u value=random.choice(x)
。randint(a,b)
返回从a
到b
的随机整数,包括b
。因此,当您使用randint(0,len(x))
时,可能会将值len(x)
作为输出,当用作索引时,该值超出范围
对于您的用例,您可能可以使用
random\u value=random.choice(x)
。因此我尝试将b的值更改为最后一个数据的索引,这样问题应该得到解决,但仍然得到相同的错误。它说与质心有关。append(x[new_cen_idx])@Elenora:你的列表可能是空的,所以任何索引值都是错误的。如果这是如此基本,那么哪个列表可能是空的?"(x[new_cen_idx])??但该列表不能为空,因为它包含整个数据集,我只尝试将“[new\u cen\u index]”中的索引数据值附加到质心列表中。@Elenora:thex
列表。出现错误的唯一可能原因是idx\u pusat\u pertama
指的是x
没有的位置。当然,假设x
是一个常规列表。显然,每当它返回错误时,“idx\u pusat\u pertama”总是返回一个相同的整数值,该值确实超出范围。在我的例子中,它总是返回35,即使imy数据只有20。如果我添加更多的数据,最终会得到相同的错误,不同的积分值。我仍然不明白为什么会发生这样的事情,所以我试着把b的值改成最后一个数据的索引,这样问题就可以解决了,但我还是得到了同样的错误。它说与质心有关。append(x[new_cen_idx])@Elenora:你的列表可能是空的,所以任何索引值都是错误的。如果这是如此基本,那么哪个列表可能是空的?"(x[new_cen_idx])??但该列表不能为空,因为它包含整个数据集,我只尝试将“[new\u cen\u index]”中的索引数据值附加到质心列表中。@Elenora:thex
列表。出现错误的唯一可能原因是idx\u pusat\u pertama
指的是x
没有的位置。当然,假设x
是一个常规列表。显然,每当它返回错误时,“idx\u pusat\u pertama”总是返回一个相同的整数值,该值确实超出范围。在我的例子中,它总是返回35,即使imy数据只有20。如果我添加更多的数据,最终会得到相同的错误,不同的积分值。但是我还是不明白为什么会发生。。
def pickcentroid(df):
x = df.values.tolist()
n_klas = 3
# random.seed(2)
idx_pusat_pertama = random.randint(0, len(df))
centroid = []
centroid_idx = []
centroid.append(x[idx_pusat_pertama])
centroid_idx.append(idx_pusat_pertama)
prob_data = []
while len(centroid) < n_klas:
ac_mindist = 0
for i in x:
dist_ke_c = []
for c in centroid:
dist_ke_c.append(dist(i,c))
ac_mindist += min(dist_ke_c)**2
for idx in range(len(df)) :
if idx not in centroid_idx:
dist_ke_c2 = []
mindist_per_data = 0
for c in centroid:
dist_ke_c2.append(dist(x[idx],c))
mindist_per_data = min(dist_ke_c2)**2
prob_data.append(mindist_per_data/ac_mindist)
else:
prob_data.append(0)
new_cen_idx = prob_data.index(max(prob_data))
centroid_idx.append(new_cen_idx)
centroid.append(x[new_cen_idx])
print(centroid)
return centroid
def dist(x,y):
r = np.array(x) - np.array(y)
distance = np.linalg.norm(r)
# print(distance)
return distance
c = pickcentroid(df)
-0.19864726098025476,-0.2174575876560727
-0.19427576174137176,-0.2658220115362011
0.24385376109048476,0.1555938625346895
-0.23636704446757748,0.14005058641250595
0.37563103051045826,0.33204816285389527
-0.13210748354848134,-0.0019122205360639893
-0.17120654390561796,0.04231258139538708
0.2865229979171536,0.34175192153482764
-0.328896319205639,-0.22737124434792602
0.03115098005450885,0.17089336362457433