转置列表

时间:2018-02-10 22:00:26

标签: python numpy transpose

我有以下列表:

y = [[0], [0], [0], [0], [1], [1], [1], [1]]

我想将其转置并以下列形式进行转换:

[[0]
[0]
[0]
[0]
[1]
[1]
[1]
[1]]

当我numpy.transpose(y)时,我得到了以下内容:

[[0 0 0 0 1 1 1 1]]

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

[[0], [0], [0], [0], [1], [1], [1], [1]]

与此表格完全相同:

[[0]
[0]
[0]
[0]
[1]
[1]
[1]
[1]]

你有一个8行1列的矩阵。在矩阵上执行的转置将其转换为只有1行和8列的矩阵,因此输出正确。

答案 1 :(得分:0)

如果y是列表列表,则会显示为单行

In [1]: y = [[0], [0], [0], [0], [1], [1], [1], [1]]
In [2]: y
Out[2]: [[0], [0], [0], [0], [1], [1], [1], [1]]
In [3]: print(y)
[[0], [0], [0], [0], [1], [1], [1], [1]]

你当然可以逐行打印

In [4]: for i in y: print(i)
[0]
[0]
[0]
[0]
[1]
[1]
[1]
[1]

如果我从中创建一个数组,我会得到一个2d(n,1)数组

In [5]: Y = np.array(y)
In [6]: Y
Out[6]: 
array([[0],
       [0],
       [0],
       [0],
       [1],
       [1],
       [1],
       [1]])
In [7]: print(Y)
[[0]
 [0]
 [0]
 [0]
 [1]
 [1]
 [1]
 [1]]

数组显示确实显示行和列。请注意,数组打印不包含逗号(但它的repr确实如此)。

如果我转置它,我得到一个(1,n)数组,显示为1行

In [8]: Y.T
Out[8]: array([[0, 0, 0, 0, 1, 1, 1, 1]])

你可能会混淆3种不同的东西 - 列表,它的打印或字符串表示,以及从列表(及其打印)构造的数组。

有一个'transpose'的列表版本:

In [9]: list(zip(*y))
Out[9]: [(0, 0, 0, 0, 1, 1, 1, 1)]

可以根据需要显示更长的列表列表(如果它不能整齐地适合一行):

In [20]: z=[[i] for i in range(15)]
In [21]: z
Out[21]: 
[[0],
 [1],
 [2],
 [3],
 [4],
 [5],
 [6],
 [7],
 [8],
 [9],
 [10],
 [11],
 [12],
 [13],
 [14]]

除了 - 这是一个ipython漂亮的打印动作。在一个简单的python 外壳

>>> [[i] for i in range(15)]
[[0], [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13], [14]]

这只是强调了我的观点 - 列表与其打印表示之间存在差异。

有一个pprint.pprint(漂亮的打印),其行为更像ipython,当列表变得太长时会切换到行打印。