Я создаю матрицу 7x29. Теперь мне нужно его инвертировать. В этом случае мне нужно инвертировать строки. Вот матрица:
matrix[7][29]
и я стараюсь использовать это:
matrix_invert = matrix[::-1,:]
но появляется следующая ошибка:
TypeError: list indices must be integers, not tuple
Если вы знаете, что здесь происходит, ответьте мне, спасибо!
Я думаю, что это не "инвертирует" матрицу, так как инвертирование матрицы означает, что если вы умножаете инвертированную матрицу на матрицу, вы получаете матрицу идентичности.
То, что вы здесь пытаетесь сделать, - это, вероятно, замена "обратных" строк матрицы. Здесь вы представляете свою матрицу как список списков. С подсписком, представляющим "строки" матрицы.
Затем вы можете нарезать внешний список:
# shallow copy
reversedmatrix = matrix[::-1]
действительно, здесь мы строим список, в котором элементы меняются на противоположные, так как эти элементы - подписи - это строки, поэтому мы создали новый список, содержащий "старые" подсписки в обратном порядке. Например:
>>> matrix = [[1,4], [2,5]]
>>> reversedmatrix = matrix[::-1]
>>> reversedmatrix
[[2, 5], [1, 4]]
Обратите внимание, однако, что здесь мы не делаем глубокую копию матрицы: если вы измените строку (например, первую) в исходной матрице, то это изменение будет отражено в соответствующей (например, последней) строке обратного матрица. Например:
>>> matrix[0][0] = 14
>>> reversedmatrix
[[2, 5], [14, 4]]
Мы можем, для такого двумерного вложенного списка, сделать глубокую копию с помощью:
# non-shallow copy
reversedmatrix = [list(row) for row in reversed(matrix)]
Например:
>>> matrix = [[1,4], [2,5]]
>>> reversedmatrix = [list(row) for row in reversed(matrix)]
>>> matrix[0][0] = 14
>>> reversedmatrix
[[2, 5], [1, 4]]
Это, однако, не "действительно глубокая" копия, так как если элементы строк не являются неизменяемыми, то снова обновления состояния этих объектов будут видны как с исходной matrix
, так и с reversedmatrix
matrix
. Таким образом, вы можете сделать глубокую копию с помощью copy.deepcopy
например:
# deep copy
from copy import deepcopy
reversedmatrix = [deepcopy(row) for row in reversed(matrix)]