Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 附加列表有时给出';索引器:列表索引超出范围';错误并导致不符合预期的结果_Python_Python 2.7_Pandas_Cluster Analysis - Fatal编程技术网

Python 附加列表有时给出';索引器:列表索引超出范围';错误并导致不符合预期的结果

Python 附加列表有时给出';索引器:列表索引超出范围';错误并导致不符合预期的结果,python,python-2.7,pandas,cluster-analysis,Python,Python 2.7,Pandas,Cluster Analysis,因此,我对使用python-2.7编程并尝试实现集群问题的初始化方法还是新手。 这些步骤是: 从数据集中选择一个随机数据作为第一个质心 当质心中的数据数量

因此,我对使用python-2.7编程并尝试实现集群问题的初始化方法还是新手。
这些步骤是:

  • 从数据集中选择一个随机数据作为第一个质心
  • 当质心中的数据数量
  • 使用公式计算所有数据到其最近质心的概率

    p(x)=D(x)**2/和(D(x)**2),其中D(x)是从数据[x]到最近质心的欧氏距离

  • 选取p(x)最高的数据,然后循环回第2位

  • 但当我尝试添加数据时,有时会出现这样的错误“IndexError:list index out-range”,有时代码可以工作,但只给出2个不同的质心,第3到n个质心给出的值与第2个质心的值相同

    我哪里做错了

    (编辑:我编辑了操作步骤,因为我错了)

    非常感谢您的友好帮助

    随机数(a,b)返回从
    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:the
    x
    列表。出现错误的唯一可能原因是
    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:the
    x
    列表。出现错误的唯一可能原因是
    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