当我尝试在Python上反转矩阵中的行时出错

时间:2018-10-15 19:00:47

标签: python python-3.x python-2.7 matrix

我创建一个7x29矩阵。现在我需要反转它。在这种情况下,我需要反转行。 这是矩阵:

matrix[7][29]

然后我尝试使用它:

matrix_invert = matrix[::-1,:]

但出现以下错误:

TypeError: list indices must be integers, not tuple

如果您知道这里会发生什么,请回答我,谢谢!

1 个答案:

答案 0 :(得分: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]]

对于这样的二维嵌套列表,我们可以使用以下方法制作 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和{ {1}}。因此,您可能希望使用copy.deepcopy进行深拷贝,例如:

reversedmatrix