Почему я должен явно написать список, чтобы эта функция работала? - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь получить метрику расстояния (силуэт) для дендрограммы, изменяя один параметр, nclusters_max, с целью построения результата.

Все работает нормально, если я явно записываю список intчисла, которые я хотел бы оценить:

for i in [4,5,6,7,8,9,10,11,12]:
    dendrogram, IDs = dendrogram(encoding, n_samples=0, n_clusters_max=i, label_clusters=True, return_clusters=True)
    silhouette = metrics.silhouette_score(encoding, IDs, metric='euclidean')
    print(i, silhouette)

, который производит вывод:

4 0.25495732
5 0.27900532
6 0.20914535
7 0.21244033
8 0.21475217
9 0.21835302
10 0.21925814
11 0.20929264
12 0.21342315

Однако, когда я пытаюсь быть более кратким (и экономить усилия), создавая список чисел сlist(np.arange(4,13)), то есть:

nclusters = list(np.arange(2,14))
for i in nclusters:
    dendrogram, IDs = dendrogram(encoding, n_samples=1, n_clusters_max=i, label_clusters=True, return_clusters=True)
    silhouette = metrics.silhouette_score(encoding, IDs, metric='euclidean')
    print(i, silhouette)

Я получаю ошибку TypeError: The second argument must be a number.

nclusters_max должен быть типа (int), но я не понимаю разницу между тем, как я получаю значениядля этой переменной, и почему это может быть проблемой из моей функции дендрограммы?

Ответы [ 2 ]

1 голос
/ 02 июля 2019

Когда вы создаете массив int с использованием

nclusters = list(np.arange(2,14))

, он создает целые числа типа 'numpy.int32'.

. Вам нужно набрать приведение к 'int' перед тем, какпередавая его в вашу функцию.

n_clusters_max=int(i)

Так как в Python типы данных являются классами, следовательно, здесь разница классов numpy.int32 и int.

0 голосов
/ 02 июля 2019

Преобразовать элементы списка в тип Python native , например:

nclusters = [int(i) for i in np.arange(2, 14)]

Если массив / список не слишком велик, просто используйте диапазон:

for i in range(2, 14):
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...