如何将一维numpy数组重塑为具有按行值的二维numpy数组

时间:2020-07-22 16:54:39

标签: python arrays numpy

假设我有一个数组:

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不管参数顺序如何以及给我相同的结果,正确的方法是什么方法。

2 个答案:

答案 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]])

签出:numpy.reshape

答案 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()

您不能只用一种方法来做。