Возвращаемая ошибка типа: объект «список» не может быть вызван

#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 список (который нельзя вызвать).

Опять же, это в основном предположения, основанные на сообщении об ошибке, поскольку вы не опубликовали код, предшествующий сообщению об ошибке. Но проверьте свой код на наличие конфликтующих имен переменных и функций.