Выполнение модуля Python kmedoids - PullRequest
0 голосов
/ 13 мая 2018

Я пытаюсь запустить реализацию кластеризации kmedoids, доступную на этой странице github .

Предоставленный минимальный рабочий пример довольно прост, но яне удается выполнить первую строку с помощью функции 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.py в том же каталоге, что и example.py

Кто-нибудь пытался использовать эту функцию в последнее время?Может ли моя версия Python (3.5) вызывать эту ошибку?

1 Ответ

0 голосов
/ 13 мая 2018

Обнаружены проблемы, действительно связанные с кодом kMedoids() , который изначально не предназначался для 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):
...