Я пытаюсь воспроизвести эту матрицу затрат:
матрица затрат
В данный момент я просто играю с кодом Python, используемым для создания матрицы затрат,Я застреваю, потому что я хочу получить утверждение elif, которое гласит:
elif a_list[i] = b_list[i]:
matrix[i][j] = min( matrix[i - 1][j] + 1,
matrix[i][j - 1] + 1,
matrix[i - 1][j - 1])
Так что без добавления +1 к последнему члену.Проблема в том, что я получаю это сообщение об ошибке «Ошибка индекса: индекс индекса выходит за пределы диапазона»
Как это исправить.На данный момент мой вывод:
0 1 2 3 4 5 6 7
1 1 2 3 4 5 6 7
2 2 2 3 4 5 6 7
3 3 3 3 4 5 6 7
4 4 4 4 4 5 6 7
и должен быть
0 1 2 3 4 5 6 7
1 1 2 3 4 5 6 7
2 2 1 2 3 4 5 6
3 3 2 2 3 4 5 6
4 4 3 3 3 4 5 6
Весь мой код АТМ:
import numpy as np
a = 'harvard'
b = 'yale'
a_list = list(a)
b_list = list(b)
#print(a_list)
#print(b_list)
matrix = []
for i in range(len(a_list) + 1):
matrix.append([])
for i in range(len(a_list) + 1):
for j in range(len(b_list) + 1):
matrix[i].append(j)
if i == 0:
matrix[i][j] = j
elif j == 0:
matrix[i][j] = i
#elif a_list[i] == b_list[j]:
# matrix[i][j] = min( matrix[i - 1][j] + 1,
# matrix[i][j - 1] + 1,
# matrix[i - 1][j - 1])
else:
matrix[i][j] = min( matrix[i - 1][j] + 1,
matrix[i][j - 1] + 1,
matrix[i - 1][j - 1] + 1)
for mat in zip(*matrix):
print(*mat)