Я думаю, что это не совсем " инвертирующая " матрица, поскольку инвертирование матрицы означает, что если вы умножите инвертированную матрицу на матрицу, то вы получите матрицу identity .
То, что вы здесь намерены сделать, это, вероятно, поменять местами «реверс» строк матрицы.Здесь вы, похоже, представляете свою матрицу в виде списка списков.С подсписком, представляющим «строки» матрицы.
Вы можете затем нарезать внешний список с помощью:
# 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]]
Для такого двумерного вложенного списка мы можем сделать копию deep с:
# 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
.Таким образом, вы можете захотеть сделать глубокую копию с copy.deepcopy
вроде:
# deep copy
from copy import deepcopy
reversedmatrix = [deepcopy(row) for row in reversed(matrix)]