Как сохранить значения расстояний с метками в матрице расстояний?

Я пытаюсь сохранить расстояния между всеми данными документами в матрице расстояний.

Это мой код:

    dists = [] #a matrix of distances
    i=0
    for row in self.matrix:
        current_row = row
        document_distances = []
        # build list with possibilities for every document in labels
        for label in self.labels:
            document_distances.append((1 - self.row_distance(current_row, label), label))

        dists[i] = document_distances #[(0.22529600444665132, 'Doc1'), (0.22952074233187614, 'Doc2'), (0.289625872768411, 'Doc3'), ...]
        i += 1
    print(dists)

Но после запуска кода я получаю следующую ошибку:

IndexError: list assignment index out of range

Может кто-нибудь сказать мне, что я должен изменить, чтобы мой код работал?

2 ответа

Решение

Вместо этого:

dists[i] = document_distances

Сделай это:

dists.append(document_distances)

В вашем коде есть несколько очень странных утверждений: вы перебираете rowи затем назначьте его current_rowи т. д. Кроме того, вы отслеживаете некоторые счетчики. Это все не обязательно.

Наилучшим способом, вероятно, является использование списка:

dists = [(1 - self.row_distance(row, label), label)
             for row in self.matrix
             for label in self.labels]

это заменяет весь код.

Или, если вы действительно хотите процедурный код, вы можете использовать append:

dists = [] #a matrix of distances

for row in self.matrix:
    document_distances = []
    for label in self.labels:
        document_distances.append((1 - self.row_distance(current_row, label), label))

    dists.append(document_distances)
print(dists)
Другие вопросы по тегам