Ошибка при попытке изменить строки в матрице на Python - PullRequest
0 голосов
/ 15 октября 2018

создаю матрицу 7х29.Теперь мне нужно инвертировать его.В этом случае мне нужно инвертировать строки.Вот матрица:

matrix[7][29]

, и я пытаюсь использовать это:

matrix_invert = matrix[::-1,:]

, но появляется следующая ошибка:

TypeError: list indices must be integers, not tuple

Если вы знаете, что здесь происходит, пожалуйста, ответьте мне, спасибо!

1 Ответ

0 голосов
/ 15 октября 2018

Я думаю, что это не совсем " инвертирующая " матрица, поскольку инвертирование матрицы означает, что если вы умножите инвертированную матрицу на матрицу, то вы получите матрицу 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)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...