【问题标题】:Executing a kmedoids python module执行 kmedoids python 模块
【发布时间】:2018-10-23 07:08:47
【问题描述】:

我正在尝试运行此github page 上可用的kmedoids 集群实现。

提供的minimal working example 非常简单,但我无法使用kMedoids() 函数执行第一行而不引发错误:

from sklearn.metrics.pairwise import pairwise_distances
import numpy as np    
import kmedoids

# 3 points in dataset
data = np.array([[1,1], 
                [2,2], 
                [10,10]])

# distance matrix
D = pairwise_distances(data, metric='euclidean')

# split into 2 clusters
M, C = kmedoids.kMedoids(D, 2)  # <-- THIS RAISES AN ERROR

print('medoids:')
for point_idx in M:
    print( data[point_idx] )

print('')
print('clustering result:')
for label in C:
    for point_idx in C[label]:
        print('label {0}: {1}'.format(label, data[point_idx]))

错误是:

Traceback (most recent call last):
File "/usr/lib/python3.5/code.py", line 91, in runcode
exec(code, self.locals)
File "", line 1, in 
File "", line 9, in kMedoids
File "mtrand.pyx", line 4832, in mtrand.RandomState.shuffle
File "mtrand.pyx", line 4835, in mtrand.RandomState.shuffle
TypeError: 'range' object does not support item assignment

我在 Eclipse PyDev 中为 Python 3.5 设置了如下示例:

  • 使用pip3 install(numpy、scipy 和 scikit-learn)安装了所有模块
  • 添加了kmedoids.pyexample.py在同一目录下的文件

最近有人试过用这个功能吗?我的 Python (3.5) 版本会导致此错误吗?

【问题讨论】:

    标签: python python-3.x k-means


    【解决方案1】:

    发现了问题,确实与 kMedoids() code 相关,这最初不是为 Python 3 设计的。

    要使其适用于 Python 3.5,请编辑以下与 range() 函数相关的行,如下所示(参见相关的 answer):

    index_shuf = range(len(rs)) -->  index_shuf = list(range(len(rs)))
    

    for t in xrange(tmax): --> for t in range(tmax):
    

    【讨论】:

      猜你喜欢
      • 2018-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-18
      • 2011-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多