重塑3D阵列的正确方法

时间:2019-08-03 22:40:03

标签: python numpy

我有一个形状为(n,4,5,5)的数据集,其中“ n”是记录数,4个通道,每个通道都有5 X 5矩阵。 Keras CNN仅接受形状(n,宽度,高度,通道)的输入。当我对

这样的数据集应用整形时
reshaped_dataset = dataset.reshape(-1, 5, 5, 4)

reshaped_dataset包含错误顺序的数据。我已经在数据集中发布了1个样本。

[[[ 0.          0.          0.          1.42413757  0.        ]
  [ 0.          0.          1.82047845  0.          0.91023923]
  [ 0.          1.82047845  0.          0.          1.82047845]
  [ 1.42413757  0.          0.          0.          0.        ]
  [ 0.          0.91023923  1.82047845  0.          0.        ]]

 [[ 1.          0.          0.          0.5         0.        ]
  [ 0.          1.          0.25        0.          0.2       ]
  [ 0.          0.25        1.          0.          0.25      ]
  [ 0.5         0.          0.          1.          0.        ]
  [ 0.          0.2         0.25        0.          1.        ]]

 [[ 9.          9.         21.          9.          9.        ]
  [ 9.          9.         21.          9.          9.        ]
  [21.         21.         49.         21.         21.        ]
  [ 9.          9.         21.          9.          9.        ]
  [ 9.          9.         21.          9.          9.        ]]

 [[ 0.80952381  0.          0.          0.47619048  0.        ]
  [ 0.          1.66666667  0.66666667  0.          0.33333333]
  [ 0.          0.66666667  3.03333333  0.          0.66666667]
  [ 0.47619048  0.          0.          0.80952381  0.        ]
  [ 0.          0.33333333  0.66666667  0.          1.66666667]]]

如何重塑(n,5,5,4)中的数据集

2 个答案:

答案 0 :(得分:2)

您可以使用np.transpose来排列数组的尺寸:

reshaped_dataset = dataset.transpose(0, 2, 3, 1)

如果dataset的轴表示(n, channel, width, height),则reshaped_dataset的轴将表示(n, width, height, channel)

答案 1 :(得分:0)

您可以使用以下代码从第一个频道转到最后一个频道:

import numpy as np

n = 5
data = np.random.randn(n, 4, 5, 5)

print(data.shape) # output - (5, 4, 5, 5)

data_in = np.moveaxis(data, 1, -1)

print(data_in.shape) # output - (5, 5, 5, 4)