【问题标题】:Error when I try to reverse rows in matrix on Python当我尝试在 Python 上反转矩阵中的行时出错
【发布时间】:2018-10-15 19:00:46
【问题描述】:

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

matrix[7][29]

我尝试使用这个:

matrix_invert = matrix[::-1,:]

但出现以下错误:

TypeError: list indices must be integers, not tuple

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

【问题讨论】:

  • 这是列表列表吗?在这种情况下,您不能使用逗号:由于(香草)Python 中不存在“二维列表”的概念,因此 numpy 有二维列表。
  • 我喜欢你的女性矩阵。
  • 是的,我有 29 个数字的 7 行,我希望第一个到最后一个。
  • @LucasDiehl:这不是问题...请提供生成列表的示例表达式
  • 谢谢兄弟,我明白了!我只是排除了第二部分

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


【解决方案1】:

我认为这并不是真正的“倒置”矩阵,因为倒置矩阵意味着如果将倒置矩阵与矩阵相乘,则可以检索到 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]]

然而,这不是一个“非常深”的副本,因为如果行的元素不是不可变的,那么这些对象的状态更新将再次通过原始matrixreversedmatrix 可见.因此,您可能希望使用 copy.deepcopy 进行深层复制,例如:

# deep copy
from copy import deepcopy

reversedmatrix =  [deepcopy(row) for row in reversed(matrix)]

【讨论】:

    猜你喜欢
    • 2021-10-11
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    相关资源
    最近更新 更多