【问题标题】:Making rows in a matrix vertical使矩阵中的行垂直
【发布时间】:2021-11-01 18:08:29
【问题描述】:

我正在尝试获取这个 (4x4) 矩阵的输入:

1.0 2.0 3.0 4.0

5.0 6.0 7.0 8.0

9.0 10.0 11.0 12.0

13.0 14.0 15.0 16.0

并使其显示为:

1.0 5.0 9.0 13.0

2.0 6.0 10.0 14.0

3.0 7.0 11.0 15.0

4.0 8.0 12.0 16.0

我需要以仅适用于 NxN 矩阵的方式编写代码。我想我可能必须做一个嵌套的 for in 循环,但我对如何使其正常工作感到困惑。如果你能帮助我,那就太好了!

【问题讨论】:

  • 看起来您正在尝试转置数据 - np.transpose 可能会有所帮助

标签: python python-3.x matrix


【解决方案1】:

您要做的是对矩阵进行转置。转置矩阵意味着将所有列更改为行(或等效地,将行更改为列)。用 numpy 很容易实现:

>>> import numpy as np
>>> a = np.random.randint(10, size=(5, 5))
>>> a
array([[3, 3, 4, 9, 8],
       [9, 0, 0, 5, 6],
       [4, 1, 2, 4, 5],
       [2, 9, 0, 8, 0],
       [9, 9, 2, 3, 0]])
>>> a.T
array([[3, 9, 4, 2, 9],
       [3, 0, 1, 9, 9],
       [4, 0, 2, 0, 2],
       [9, 5, 4, 8, 3],
       [8, 6, 5, 0, 0]])
>>> np.transpose(a)
array([[3, 9, 4, 2, 9],
       [3, 0, 1, 9, 9],
       [4, 0, 2, 0, 2],
       [9, 5, 4, 8, 3],
       [8, 6, 5, 0, 0]])

以手动方式进行,例如

>>> import numpy as np
>>> matrix = np.array([
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9],
    ])
>>> transposed_matrix = np.empty((3, 3))
>>> for i in range(3):
...     transposed_matrix[:, i] = matrix[i, :]
>>> transposed_matrix
array([[1. 4. 7.]
       [2. 5. 8.]
       [3. 6. 9.]])

或完全没有 numpy(可能有很多方法可以做到这一点,而且可能比我做的更聪明!=)):

>>> matrix = [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9],
    ]
>>> transposed_matrix = []
>>> for i in range(3):
...     tmp = []
...     for j in range(3):
...         tmp.append(matrix[j][i])
...     transposed_matrix.append(tmp)
>>> transposed_matrix
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]

【讨论】:

  • 如果不导入 numpy 就不可能吗?
  • @ManvirKaur 当然有可能!我为我的答案添加了另外两个解决方案。