Python:在辅助诊断上进行转置

2024-04-23 08:09:04 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有这个矩阵,例如:

matrix = [[1, 2, 3, 4], 
          [5, 6, 7, 8], 
          [9, 10, 11, 12],
          [13, 14, 15, 16]]

我想把它放在第二个对角线上,而不碰第一行和第一列。它看起来像这样:

^{pr2}$

这是我尝试过的,但它不会改变矩阵:

for i in range(1, 4):
    for j in range(1, 4):
        temp = copy.deepcopy(matrix[i][j])
        matrix[i][j] = matrix[4-j][4-i]
        matrix[4-j][4-i] = temp

Tags: inforrange矩阵tempmatrixcopy对角线
3条回答

您的代码无法工作,因为您要交换两次项目:将matrix[i][j]与{}同时使用i和{}在{}中交换意味着交换:

  • [1][1][3][3]
  • [1][2][3][2]
  • 。。。在
  • 再次使用[3][2]和{}
  • 再次使用[3][3]和{}

你可以清楚地看到,你交换每一个项目两次,这使你回到原来的矩阵。要解决这个问题,只需使用range(1, 3)。在

另外,您可以内联交换值,不需要使用copy和临时变量。下面是一个有效的例子:

for i in range(1, 3):
    for j in range(1, 3):
        matrix[i][j], matrix[4-j][4-i] = matrix[4-j][4-i], matrix[i][j]

考虑将list转换为类似数组的对象,例如np.matrix,以利用标准的2D操作。例如:

import numpy as np

matrix = np.matrix([[1, 2, 3, 4],
      [5, 6, 7, 8],
      [9, 10, 11, 12],
      [13, 14, 15, 16]])

matrix[1:,1:]=matrix[1:,1:][::-1].transpose()[::-1]

你的代码不能工作,因为你要交换两次每对变量,再次构建同一个矩阵。在

另外,您不需要对整数矩阵进行copy.deepcopy调用,并且引用了一个未定义的table变量

# Working code
for i in range(1, 4):
    for j in range(1, 4 - i):
        matrix[i][j], matrix[4 - j][4 - i] = matrix[4 - j][4 - i], matrix[i][j]

相关问题 更多 >