Python:重塑数组

时间:2020-10-17 15:08:06

标签: python arrays numpy reshape

是否可以像这样重塑数组的数组:

np.array([[1,1,1,1,1,1],
          [1,0,0,0,0,1],
          [1,0,1,1,0,1]])

分成多个3x2阵列,如下所示:

np.array([
    [[1,1],[1,0],[1,0]],
    [[1,1],[0,0],[1,1]],
    [[1,1],[0,1],[0,1]]])

谢谢!

3 个答案:

答案 0 :(得分:1)

numpy可以reshape()

In [29]: a=np.array([[1,1,1,1,1,1],
    ...:           [1,0,0,0,0,1],
    ...:           [1,0,1,1,0,1]])

In [30]: a.reshape((3,3,2))
Out[30]:
array([[[1, 1],
        [1, 1],
        [1, 1]],

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

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

这只是改变了视图。如果需要a = a.reshape((3,3,2))

,可以重新分配

答案 1 :(得分:1)

要获得所需的特定输出,您需要调整形状和转置特定的列(通过传递要转置的列)。

首先,您需要重塑形状以获取所需的分组。使用-1就像通配符一样,将使中间值成为正确填写形状所需的值。

使用arr.reshape(3,-1, 2)重塑可以为您提供:

array([[[1, 1],[1, 1],[1, 1]],
       [[1, 0],[0, 0],[0, 1]],
       [[1, 0],[1, 1],[0, 1]]])

组是正确的,但希望将列分组为行。这就是transpose的用途。在这种情况下,您想交换第一轴和第二轴。

您可以像这样一步来实现:

import numpy as np

arr = np.array([
    [1,1,1,1,1,1],
    [1,0,0,0,0,1],
    [1,0,1,1,0,1]])

arr.reshape(3,-1, 2).transpose([1, 0, 2])

输出:

array([[[1, 1], [1, 0], [1, 0]],
       [[1, 1], [0, 0], [1, 1]],
       [[1, 1], [0, 1], [0, 1]]])

答案 2 :(得分:1)

回答是否可能将一个数组整形为另一个数组的最好方法是比较它们的展平形式:

arr = np.array([[1,1,1,1,1,1], [1,0,0,0,0,1], [1,0,1,1,0,1]])
arr2 = np.array([[[1,1],[1,0],[1,0]], [[1,1],[0,0],[1,1]], [[1,1],[0,1],[0,1]]])
>>> print(arr.flatten())
[1 1 1 1 1 1 1 0 0 0 0 1 1 0 1 1 0 1]
>>> print(arr2.flatten())
[1 1 1 0 1 0 1 1 0 0 1 1 1 1 0 1 0 1]

在这种情况下,由于结果不同,因此是不可能的。您需要另外swapaxes

arr.reshape(3,3,2).swapaxes(0,1)

enter image description here