Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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
Arrays Python循环中的更新和追加_Arrays_Loops_Python 2.7_Dictionary_Numpy - Fatal编程技术网

Arrays Python循环中的更新和追加

Arrays Python循环中的更新和追加,arrays,loops,python-2.7,dictionary,numpy,Arrays,Loops,Python 2.7,Dictionary,Numpy,我是Python的新手,我正在尝试开发一个代码,该代码应该基于一个名为Pycluster的预定义包执行K-Means集群。一开始,我使用固定数量的集群(n=10个集群)进行集群,代码运行良好。我试着稍微扩展一下代码,这样就不用只创建10个集群,而是尝试创建一个循环,将所需的集群数量从2个增加到10个(或更多)。开始出现问题是因为正如我所说,我对Python完全陌生。 我开发的代码如下所示。我意识到错误开始于代码行33到49。 我非常感谢为使代码运行所提供的任何帮助 # -*- coding: u

我是Python的新手,我正在尝试开发一个代码,该代码应该基于一个名为Pycluster的预定义包执行K-Means集群。一开始,我使用固定数量的集群(n=10个集群)进行集群,代码运行良好。我试着稍微扩展一下代码,这样就不用只创建10个集群,而是尝试创建一个循环,将所需的集群数量从2个增加到10个(或更多)。开始出现问题是因为正如我所说,我对Python完全陌生。 我开发的代码如下所示。我意识到错误开始于代码行33到49。 我非常感谢为使代码运行所提供的任何帮助

# -*- coding: utf-8 -*-
"""
Created on Mon Oct 21 13:53:40 2013

@author: Engin
"""


from Pycluster import *
import numpy as np


#Open the text file containing the stored smart meter data
d=np.loadtxt("120-RES-195-Normalized.txt", delimiter="\t", skiprows=1, usecols=range(1,49))


handle=open("120-RES-195-Normalized.txt")  
record = read(handle) #Store the smart meter data in an array called record.

cluster_results = np.ones((120, 11))
cluster_centroids=np.array([])
within_cluster_sum_of_squares=np.ones((1,11))
between_cluster_sum_of_squares=np.ones((1,11))
distance=[]

for n in range (1,11):
    cluster_results[:,n-1], within_cluster_sum_of_squares[:,n-1], optimal_solution_repetition = record.kcluster(nclusters=n, npass=10, method='a', dist='e')     #Performs the K-Means clustering using the defined parameters
    centroids, cmask = record.clustercentroids(cluster_results[:,n-1], method='a', transpose=0) #Calculates the cluster centroids
    cluster_centroids=np.append(cluster_centroids,centroids)

#The following routine stores the cluster numbers and the indices of the elements belonging to each
#cluster so that the Between Clusters Sum of Squares would be easily calculated. The results will also
#be easily visualised.
    from collections import defaultdict
    cluster_numbers_members = defaultdict(list)
    for i,item in enumerate(cluster_results[:,n-1]):
        cluster_numbers_members[item].append(i)
    cluster_numbers_members = {k:v for k,v in cluster_numbers_members.items() if len(v)>=1}
    cluster_members=cluster_numbers_members.values()
    cluster_numbers=cluster_numbers_members.keys()

    distance[:,n-1]=0
    between_cluster_sum_of_squares[:,n-1]=0
    for i in range(0,n):
        for k in range(0,n):
            distance[:,n-1] = record.clusterdistance(index1=cluster_members[i], index2=cluster_members[k], method='a', dist='e', transpose=0)
            between_cluster_sum_of_squares[:,n-1]=between_cluster_sum_of_squares[:,n-1]+distance[:,n-1]

    WCBCR = within_cluster_sum_of_squares/between_cluster_sum_of_squares
    print cluster_results[:,n-1]
    print within_cluster_sum_of_squares[:,n-1]

print cluster_centroids

#Arranging cluster centroids in (1X48) vector form
cluster_tuple=zip(*[iter(cluster_centroids)]*48)
cluster_array=numpy.array(list(cluster_tuple))
替换

[:,n-1]


“开始出现问题是因为正如我所说,我对Python完全陌生。”请提供更多细节。什么样的问题?你收到错误消息了吗?嗨@Kevin,我已经更新了代码,因为我在变量名中有一些错误。在早期版本的代码中,我使用了一些其他变量名,但必须重命名它们以使代码更加清晰一致。当我试图运行当前(更新的)代码时,我不断收到以下错误消息:距离[:,n-1]=0类型错误:列表索引必须是整数,而不是元组。提前感谢您的帮助。您好@ExperimentsWithCode,我试过了,但一直得到以下错误代码:ValueError:无法将输入数组从形状(120)广播到形状(0,11)@user2470127是否为您提供了行号?我看不出你是从哪里得到“身材”的。另外,如果您能以正确的输入格式向我提供一些示例数据,我可以测试一些更改。@user2470127好的,所以我相信这些形状是矩阵。我相信你可能遇到的错误可能是由第二个矩阵没有实际内容引起的。形状为(0,11)的矩阵是“[]”,当您尝试在矩阵之间进行计算时,会出现错误。如果我制作第二个矩阵(1,11)而不是(0,11),我就无法在(120)和(0,11)的两个矩阵之间进行任何数学运算,而不会得到以下错误:“ValueError:操作数无法与形状(120)(0,11)一起广播”。我可以在它们之间执行操作。您好@ExperimentsWithCode,很抱歉回复太晚。忙碌的一天,我只是检查了我的电子邮件。您能告诉我如何以正确的格式向您发送样本数据吗?我非常感谢你提供的帮助。@user2470127一切都好。我知道怎么回事。我能够创建自己的数据文件,该文件似乎正在工作(使用4个活动行,而不是您的120行)。我遇到了和你一样的错误。我打印了“record.kcluster”,结果是“(数组([0,0,0,0],dtype=int32),1.7976931348623157e+308,11)”。我尝试将“[0,0,0,0]与np.one((4,11))”相乘/相加,但得到了“操作数无法一起广播”,因此我尝试将“cluster_results=np.one((4,11))”切换为“cluster_results=np.one((11,4)),并将[:n-1]与[n-1:]切换。现在它进入下一行,出现错误
[:n-1]  or [:(n-1)]  # same thing, use whatever you find easier to read