`IndexError:仅整数,切片(`:`),省略号(`...`),`numpy中的python代码段错误

时间:2018-10-18 05:02:53

标签: python numpy

我正在对我的数据(1500x2矩阵)运行以下python代码段,并尝试从头开始实现KMeans算法:-

/app/views/foo/bar.html

当我比较各点的欧式距离时,错误发生在第def closestCentroids(arr, centroids): idx = np.zeros(arr.shape[0]); for i in range(0, arr.shape[0]): idx[i] = 0 for j in range(0, centroids.shape[0]): if(np.linalg.norm(arr[i]-centroids[j]) < np.linalg.norm(arr[i]-centroids[idx[i]])): idx[i] = j return idx def computeCentroids(arr, idx, k = 3): centroids = np.zeros((k, arr.shape[1])) for i in range(0, k): idx_k = (idx==i).sum() centroids[i] = (arr[np.where(idx == i)].sum(axis=0))/idx_k return centroids def kMeans(arr, k = 3): centroids = arr[np.random.randint(arr.shape[0], size = k), :] idx = np.zeros(arr.shape[0]) for i in range(0, 50): idx = closestCentroids(arr, centroids) centroids = computeCentroids(arr, idx, k=3) return centroids 行。我不知道我要去哪里错了。

1 个答案:

答案 0 :(得分:1)

默认情况下,numpy.zeros()创建一个浮点值数组,因此您的数组idx是一个浮点数组。您使用idx的值来索引数组centroids,而numpy不允许使用浮点值进行索引,因此idx必须是整数数组。

idx的创建更改为

idx = np.zeros(arr.shape[0], dtype=int)