5

我必须通过以下方式转置 3d 列表:

输入:

matrix7 = [[['A ', 'E ', 'C#'], ['B ', 'E ', 'C#'], ['C ', 'E ', 'C#']], 
[['  ', 'F#', 'D '], ['  ', 'F#', 'D '], ['  ', 'F#', 'D ']], 
[['  ', 'E ', 'B '], ['  ', 'E ', 'B '], ['  ', 'E ', 'B ']], 
[['  ', 'E ', 'C#'], ['  ', 'E ', 'C#'], ['  ', 'E ', 'C#']], 
[['  ', 'F#', 'D '], ['  ', 'F#', 'D '], ['  ', 'F#', 'D ']], 
[['  ', 'E ', 'B '], ['  ', 'E ', 'B '], ['  ', 'E ', 'B ']], 
[['  ', '  ', '  '], ['  ', '  ', '  '], ['  ', '  ', '  ']], 
[['  ', 'E ', 'C#'], ['  ', 'E ', 'C#'], ['  ', 'E ', 'C#']]]

所需的输出:

[[['A ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', '  ', '  '], ['  ', 'E ', 'C#']], 
[['B ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', 'E ', 'C#'], 
['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', '  ', '  '], ['  ', 'E ', 'C#']], 
[['C ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', 'E ', 'C#'], 
['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', '  ', '  '], ['  ', 'E ', 'C#']]]

我有以下程序:

matrix8 = []
for index in matrix7:
    matrix8 = numpy.array(matrix7).transpose()
    matrix9 = matrix8.tolist()
print matrix9

这给了我错误的输出:

[[['A ', 'E ', 'C#'], ['B ', 'E ', 'C#'], ['C ', 'E ', 'C#']], 
[['  ', 'F#', 'D '], ['  ', 'F#', 'D '], ['  ', 'F#', 'D ']], 
[['  ', 'E ', 'B '], ['  ', 'E ', 'B '], ['  ', 'E ', 'B ']], 
[['  ', 'E ', 'C#'], ['  ', 'E ', 'C#'], ['  ', 'E ', 'C#']], 
[['  ', 'F#', 'D '], ['  ', 'F#', 'D '], ['  ', 'F#', 'D ']], 
[['  ', 'E ', 'B '], ['  ', 'E ', 'B '], ['  ', 'E ', 'B ']], 
[['  ', '  ', '  '], ['  ', '  ', '  '], ['  ', '  ', '  ']], 
[['  ', 'E ', 'C#'], ['  ', 'E ', 'C#'], ['  ', 'E ', 'C#']]]

谁能帮我这个?

4

2 回答 2

12

我认为这就是你想要的:

numpy.transpose(matrix7, axes=(1, 0, 2)).tolist()  # The 'axes' attribute tells transpose to swaps axes 0 and 1, leaving the last one alone.

输出:

[[['A ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', '  ', '  '], ['  ', 'E ', 'C#']],
[['B ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', '  ', '  '], ['  ', 'E ', 'C#']],
[['C ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', '  ', '  '], ['  ', 'E ', 'C#']]]
于 2013-08-15T19:26:18.027 回答
3

您实际上并不需要 numpy :

>>> [list(x) for x in zip(*matrix7)]
[[['A ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', '  ', '  '], ['  ', 'E ', 'C#']],
 [['B ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', '  ', '  '], ['  ', 'E ', 'C#']],
 [['C ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', '  ', '  '], ['  ', 'E ', 'C#']]]

或者,如果您不介意获取列表元组的列表,只需:

>>> list(zip(*matrix7))
[(['A ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', '  ', '  '], ['  ', 'E ', 'C#']),
 (['B ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', '  ', '  '], ['  ', 'E ', 'C#']),
 (['C ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', '  ', '  '], ['  ', 'E ', 'C#'])]

或者,在 Python 2.x 中,甚至更少:

>>> zip(*matrix7)
[(['A ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', '  ', '  '], ['  ', 'E ', 'C#']),
 (['B ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', '  ', '  '], ['  ', 'E ', 'C#']),
 (['C ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', 'E ', 'C#'], ['  ', 'F#', 'D '], ['  ', 'E ', 'B '], ['  ', '  ', '  '], ['  ', 'E ', 'C#'])]
于 2013-08-15T19:33:53.940 回答