#python
Вопрос:
Мой код возвращает ошибку типа, когда я пытаюсь реализовать алгоритм кластеризации. Я попытался изменить входные данные этой строки, чтобы устранить ошибку, но я не уверен, почему она возвращает объект списка «не вызываемая ошибка».
def clustering(xs, K, steps=10):
(T, W) = xs.shape
representatives = np.zeros((K, W))
group_assignments = np.random.randint(0, K, T)
group_history = [group_assignments]
assign = []
assign_cluster = []
for iteration in range(0,steps):
for i in range(len(xs)):
distance = {}
for c in range(K):
distance[c] = compute_distance(xs[i],representatives[c])
assign = assign_cluster(distance,xs[c],representatives)
group_assignments[assign[0]] = compute_new_cluster(assign[1],representatives[assign[0]])
if iteration == (steps-1):
assign_cluster.append(assign)
return [assign_cluster, K]
Комментарии:
1. У вас есть вызываемая функция
assign_cluster
, но также вызывается локальная переменная (список)assign_cluster
. Вам нужно изменить одно из этих имен, чтобы переводчик мог определить, какое из них вы имеете в виду. После того, как ваш код определит локальную переменную, интерпретатор не сможет сказать, что вassign = assign_cluster(distance,xs[c],representatives)
вас на самом деле имеется в виду функция, а не список.
Ответ №1:
Похоже, вы не опубликовали фрагмент кода, в котором на самом деле произошла ошибка. Но, основываясь на сообщении об ошибке , вы, возможно, создали вызываемый список kmeans_cluster
, который конфликтует с именем вашей функции. Возможно, именно поэтому он пытается «вызвать» ваш список, потому что, хотя вы и предполагаете, что он будет использовать kmeans_cluster
функцию, на самом деле он использует kmeans_cluster
список (который нельзя вызвать).
Опять же, это в основном предположения, основанные на сообщении об ошибке, поскольку вы не опубликовали код, предшествующий сообщению об ошибке. Но проверьте свой код на наличие конфликтующих имен переменных и функций.