Ошибка при попытке изменить строки в матрице на Python

1

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

matrix[7][29]

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

matrix_invert = matrix[::-1,:]

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

TypeError: list indices must be integers, not tuple

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

  • 0
    Это список списков? В этом случае вы не можете использовать запятую: поскольку понятие «2d списки» не существует в (ванильном) Python, numpy, тем не менее, имеет 2d списки.
  • 0
    Мне нравится, как твоя матрица женская.
Показать ещё 4 комментария
Теги:
python-3.x
python-2.7
matrix

1 ответ

0

Я думаю, что это не "инвертирует" матрицу, так как инвертирование матрицы означает, что если вы умножаете инвертированную матрицу на матрицу, вы получаете матрицу идентичности.

То, что вы здесь пытаетесь сделать, - это, вероятно, замена "обратных" строк матрицы. Здесь вы представляете свою матрицу как список списков. С подсписком, представляющим "строки" матрицы.

Затем вы можете нарезать внешний список:

# 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)]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню