假设我有一个数组:
x = np.array([1, 1, 1, 2, 2, 2, 3, 3, 3])
我想将其转换为2D数组,但要按行输入后续值:
array([[1, 2, 3],
[1, 2, 3],
[1, 2, 3]])
我认为,由于x.reshape(-1, 3)
按列填充值,因此x.reshape(3, -1)
会给我我期望的输出,但事实并非如此。我显然可以做x.reshape(3, -1).T
,但是我很想了解为什么reshape
不管参数顺序如何以及给我相同的结果,正确的方法是什么方法。
答案 0 :(得分:2)
您可以使用order参数将其重塑为'F'
('Fortran'):
>>> x = np.array([1, 1, 1, 2, 2, 2, 3, 3, 3])
>>> x.reshape(3,-1, order='F')
array([[1, 2, 3],
[1, 2, 3],
[1, 2, 3]])
答案 1 :(得分:1)
当传递-1进行整形时,它仅表示您没有指定所需的行数或列数。因此,当您执行x.reshape(-1, 3)
时,就意味着您要3列,然后让numpy 决定使用多少行。而当您执行x.reshape(3, -1)
时,仅表示您要3行,然后让numpy决定要使用多少列。因此它不会改变结果。
您基本上要做的是x.reshape(3, -1).transpose()
或x.reshape(-1, 3).transpose()
您不能只用一种方法来做。