Python 我能对这些错误做些什么?我可以重新启动程序再试一次吗?

Python 我能对这些错误做些什么?我可以重新启动程序再试一次吗?,python,exception-handling,runtime-error,k-means,Python,Exception Handling,Runtime Error,K Means,我有一个程序,从命令行获取csv的数据文件,以及用于聚类的整数值(这是一个从头开始的K-Means程序)。我经常遇到这些错误: Traceback (most recent call last): File "NewK.py", line 73, in <module> kMeans(centroids,dataPoints) File "NewK.py", line 53, in kMeans CentroidMeans.append(np.mean(dat

我有一个程序,从命令行获取csv的数据文件,以及用于聚类的整数值(这是一个从头开始的K-Means程序)。我经常遇到这些错误:

Traceback (most recent call last):
  File "NewK.py", line 73, in <module>
    kMeans(centroids,dataPoints)
  File "NewK.py", line 53, in kMeans
    CentroidMeans.append(np.mean(dataPoints[t2 == [x]], axis=0))
  File "C:\Python27\lib\site-packages\numpy\core\fromnumeric.py", line 2942, in
mean
    out=out, **kwargs)
  File "C:\Python27\lib\site-packages\numpy\core\_methods.py", line 68, in _mean

    ret, rcount, out=ret, casting='unsafe', subok=False)
KeyboardInterrupt
这种情况并非每次都发生,但确实经常发生。处理这个问题的最佳方法是什么?是的,这是家庭作业:)

Python代码:

import numpy as np
from pprint import pprint
import random
import sys
import warnings

arglist = sys.argv 

NoOfCentroids = int(arglist[2])

dataPointsFromFile = np.array(np.loadtxt(sys.argv[1], delimiter = ','))

dataRange = ([])

with open(arglist[1]) as f:
    print 'Points in data set: ',sum(1 for _ in f)

dataRange.append(round(np.amin(dataPointsFromFile),1))
dataRange.append(round(np.amax(dataPointsFromFile),1))
dataRange = np.asarray(dataRange)

dataPoints = np.array(dataPointsFromFile)
print 'Dimensionality of Data: ', dataPoints.shape

randomCentroids = []
data = ([])
templist = []
i = 0

while i<NoOfCentroids:
    for j in range(len(dataPointsFromFile[1,:])):
        cat = round(random.uniform(np.amin(dataPointsFromFile),np.amax(dataPointsFromFile)),1)
        templist.append(cat)
    print '\n'
    randomCentroids.append(templist)
    templist = []
    i = i+1

centroids = np.asarray(randomCentroids)

def kMeans(array1, array2):
    ConvergenceCounter = 1
    keepGoing = True
    StartingCentroids = np.copy(centroids)
    while keepGoing:      
        #--------------Find The new means---------#
        t0 = StartingCentroids[None, :, :] - dataPoints[:, None, :]
        t1 = np.linalg.norm(t0, axis=-1)
        t2 = np.argmin(t1, axis=-1)
        #------Push the new means to a new array for comparison---------#
        CentroidMeans = []
        for x in xrange(len(StartingCentroids)):
            CentroidMeans.append(np.mean(dataPoints[t2 == [x]], axis=0))
        #--------Convert to a numpy array--------#
        NewMeans = np.asarray(CentroidMeans)
        #------Compare the New Means with the Starting Means------#
        if np.array_equal(NewMeans,StartingCentroids):
            print ('Convergence has been reached after {} moves'.format(ConvergenceCounter))
            print ('Starting Centroids:\n{}'.format(centroids))
            print ('Final Means:\n{}'.format(NewMeans))
            print ('Final Cluster assignments: {}'.format(t2))
            for x in xrange(len(StartingCentroids)):
                print ('Cluster {}:\n'.format(x)), dataPoints[t2 == [x]]
            for x in xrange(len(StartingCentroids)):
                print ('Size of Cluster {}:'.format(x)), len(dataPoints[t2 == [x]])
            keepGoing = False
        else:
            ConvergenceCounter  = ConvergenceCounter +1
            StartingCentroids =np.copy(NewMeans)

kMeans(centroids, dataPoints)
将numpy导入为np
从pprint导入pprint
随机输入
导入系统
进口警告
arglist=sys.argv
NoOfCentroids=int(arglist[2])
dataPointsFromFile=np.array(np.loadtxt(sys.argv[1],分隔符=','))
数据范围=([])
将open(arglist[1])作为f:
打印“数据集中的点:”,求和(f中的1)
append(round(np.amin(dataPointsFromFile),1))
追加(round(np.amax(dataPointsFromFile),1))
dataRange=np.asarray(dataRange)
dataPoints=np.array(dataPointsFromFile)
打印“数据的维度:”,dataPoints.shape
随机质心=[]
数据=([])
圣殿骑士=[]
i=0

后者是一个警告,而不是一个错误。前者是一个
键盘中断
,你在按ctrl-c吗?是的,我正在使用
键盘中断
,因为如果我有时不按,程序就会暂停。你知道有什么可以帮忙的吗?后者是一个警告,而不是一个错误。前者是一个
键盘中断
,你在按ctrl-c吗?是的,我正在使用
键盘中断
,因为如果我有时不按,程序就会暂停。你知道有什么可以帮忙的吗?
import numpy as np
from pprint import pprint
import random
import sys
import warnings

arglist = sys.argv 

NoOfCentroids = int(arglist[2])

dataPointsFromFile = np.array(np.loadtxt(sys.argv[1], delimiter = ','))

dataRange = ([])

with open(arglist[1]) as f:
    print 'Points in data set: ',sum(1 for _ in f)

dataRange.append(round(np.amin(dataPointsFromFile),1))
dataRange.append(round(np.amax(dataPointsFromFile),1))
dataRange = np.asarray(dataRange)

dataPoints = np.array(dataPointsFromFile)
print 'Dimensionality of Data: ', dataPoints.shape

randomCentroids = []
data = ([])
templist = []
i = 0

while i<NoOfCentroids:
    for j in range(len(dataPointsFromFile[1,:])):
        cat = round(random.uniform(np.amin(dataPointsFromFile),np.amax(dataPointsFromFile)),1)
        templist.append(cat)
    print '\n'
    randomCentroids.append(templist)
    templist = []
    i = i+1

centroids = np.asarray(randomCentroids)

def kMeans(array1, array2):
    ConvergenceCounter = 1
    keepGoing = True
    StartingCentroids = np.copy(centroids)
    while keepGoing:      
        #--------------Find The new means---------#
        t0 = StartingCentroids[None, :, :] - dataPoints[:, None, :]
        t1 = np.linalg.norm(t0, axis=-1)
        t2 = np.argmin(t1, axis=-1)
        #------Push the new means to a new array for comparison---------#
        CentroidMeans = []
        for x in xrange(len(StartingCentroids)):
            CentroidMeans.append(np.mean(dataPoints[t2 == [x]], axis=0))
        #--------Convert to a numpy array--------#
        NewMeans = np.asarray(CentroidMeans)
        #------Compare the New Means with the Starting Means------#
        if np.array_equal(NewMeans,StartingCentroids):
            print ('Convergence has been reached after {} moves'.format(ConvergenceCounter))
            print ('Starting Centroids:\n{}'.format(centroids))
            print ('Final Means:\n{}'.format(NewMeans))
            print ('Final Cluster assignments: {}'.format(t2))
            for x in xrange(len(StartingCentroids)):
                print ('Cluster {}:\n'.format(x)), dataPoints[t2 == [x]]
            for x in xrange(len(StartingCentroids)):
                print ('Size of Cluster {}:'.format(x)), len(dataPoints[t2 == [x]])
            keepGoing = False
        else:
            ConvergenceCounter  = ConvergenceCounter +1
            StartingCentroids =np.copy(NewMeans)

kMeans(centroids, dataPoints)