如何将3 dim numpy数组减少到2 dim

时间:2017-07-22 18:40:21

标签: python arrays numpy

我试图将一个3 dim numpy数组减少为一个2 dim数组,但是除了把它放在for循环中之外我不会想到一种方法,这需要花费太多时间。下面是我的代码片段。 train_dataset是一个三维形状的阵列(200000,28,28),我想通过将每个28 x 28阵列堆叠200,000次将其转换为2 dim的形状阵列(5600000,28)。但是下面的代码占用了太多时间。有人可以咨询

train_data = np.empty([28,28])
for i in range(train_dataset.shape[0]):
     train_data=np.append(train_data,train_dataset[i,:,:],axis=0)

2 个答案:

答案 0 :(得分:2)

由于您希望沿着axis=0堆叠,这意味着数据的顺序不会改变,您可以简单地重塑它,使最后一个维度的大小保持不变:

train_dataset.reshape(-1, train_dataset.shape[-1])

实施例

train_dataset = np.array([[[1,2],[3,4]], [[5,6],[7,8]]])

train_dataset
#array([[[1, 2],
#        [3, 4]],

#       [[5, 6],
#        [7, 8]]])

train_dataset.reshape(-1, train_dataset.shape[-1])
#array([[1, 2],
#       [3, 4],
#       [5, 6],
#       [7, 8]])

答案 1 :(得分:2)

您可以使用reshape函数,该函数将一个预定义形状的数组重新整形为具有给定维度的另一个数组。 示例:

train_data = numpy.reshape(train_dataset,(4800000,28))

我想那可以胜任。