我有以下列表:
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]]
有什么想法吗?
答案 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
,当列表变得太长时会切换到行打印。