Проблема в логике вашего аккреции:
addedDP = []
for row in range(0, (len(m1))):
for col in range(0, len(transposedMatrix)):
addedDP.append(dotProduct(m1[row], transposedMatrix[col]))
Вы добавляете каждый элемент к addedDP
при прохождении матрицы: каждый продукт добавляется в глобальный списокзначений, а не только значения для текущей строки. addedDP
не сбрасывается для каждой новой строки. И затем для каждой строки в матрице:
newMatrix.append(addedDP)
вы добавляете исходную ссылку во весь список. Таким образом, когда вы закончите, у вас будет len(m1)
копий этого списка в вашем списке «результатов».
Это можно исправить, повторно инициализировав addedDP
для каждой строки:
newMatrix = []
for row in range(0, (len(m1))):
addedDP = []
for col in range(0, len(transposedMatrix)):
addedDP.append(dotProduct(m1[row], transposedMatrix[col]))
# print("row, col:", row, col, addedDP)
newMatrix.append(addedDP)
# print("row", row, addedDP)
return newMatrix
Я оставил в своих отладочных print
заявлениях. Я настоятельно рекомендую вам изучить этот основной инструмент отладки: если у вас есть больная программа, спросите , где что-то болит! :-) Смотрите этот прекрасный debug блог для помощи.
Учитывая основную программу:
m1 = [[1, 2],
[3, 4]]
m2 = [[0, 1],
[-1, 0]]
print(matrixmult(m1, m2))
Вывод с включенными print
инструкциями:
row, col: 0 0 [-2]
row, col: 0 1 [-2, 1]
row 0 [-2, 1]
row, col: 1 0 [-4]
row, col: 1 1 [-4, 3]
row 1 [-4, 3]
[[-2, 1], [-4, 3]]