我创建一个7x29矩阵。现在我需要反转它。在这种情况下,我需要反转行。 这是矩阵:
matrix[7][29]
然后我尝试使用它:
matrix_invert = matrix[::-1,:]
但出现以下错误:
TypeError: list indices must be integers, not tuple
如果您知道这里会发生什么,请回答我,谢谢!
答案 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