【问题标题】:Forcefully add dimension to NumPy array强制向 NumPy 数组添加维度
【发布时间】:2017-08-19 01:05:04
【问题描述】:

我在数组trainAll 中有一个形状为 N × H × W × 3 的四维数据。我需要把它分开,所以我做了

X_train = trainAll[:,:,:,1]
Y_train = trainAll[:,:,:,1:3]

正如预期的那样,Y_train.shapeN × H × W × 2

但是X_train.shapeN × H × W,因为最后一个维度的大小只有 1。 但是神经网络需要四维数组,所以应该是这样的

N × H × W × 1

令人惊奇的是,如果我执行trainAll[:,:,:,2:3],那么我会得到N*H*W*1,但我希望将第一个维度分开,而不是最后一个维度。

老实说,我无法谷歌,因为我不知道该问什么。那么谁能帮帮我,这样我不仅可以分离第一维,而且shapeN × H × W × 1 而不是 N × 高 × 宽 ?

【问题讨论】:

  • 这些是 numpy 数组,因为我将它们打印为 aray.shape
  • 我的错,我正在这样做 trainAll[:,:,:,1] 而不是 trainAll[:,:,:,0] 但我找到了 trainAll[:,:,:,0:1] 的解决方案

标签: python-2.7 numpy multidimensional-array dimensions


【解决方案1】:

只需尝试添加一个新轴作为所需的维度。 (这里,作为第四维度)。

X_train = trainAll[:, :, :, 0]
X_train = X_train[:, :, :, np.newaxis]
# now, X_train.shape will be N * H * W * 1

当你切片它们时你没有首先得到它们的原因是因为切片在使用单个索引时将结果传递为(n,),而你通过添加一个新轴使其成为(n, 1)

【讨论】:

  • 即使我能够在单行中做到这一点,但我接受了“因为切片将结果作为(n,)”的答案
【解决方案2】:

我能够弄清楚,但仍然不知道我的答案是否正确。我想知道 python 的方法以及当形状转移到 N*H*W 而不是 N*H*W*1 时会发生什么

解决方案: trainAll[:,:,:,0:1] 所以不要把trainAll[:,:,:,1] 捡起来,而是把它切片

【讨论】:

  • 这也是我建议的原因。或者,您可以使用numpy.reshape
  • 否则,X_train = trainAll[:, :, :, 0]
  • @kmario23 你的解决方案的问题是arr.shape 变成N*H*W 而我需要它作为N*H*W*1。我通过切片数组完成的
  • @kmario23 我不知道也想知道为什么输出形状变为N*h*w 而不是N*h*w*1
  • 抱歉,我错过了一些解决方案。正确的是X_train = trainAll[:, :, :, 0]; X_train = X_train[:, :, :, np.newaxis]
【解决方案3】:

我发现了以下内容并且效果更好:tf.expand_dimstensorflow docs,以减少尺寸而不是使用:tf.squeeze() 这里 tf 指的是tensorflow

【讨论】:

    猜你喜欢
    • 2020-06-24
    • 2013-06-28
    • 2017-01-18
    • 2017-06-10
    • 1970-01-01
    相关资源
    最近更新 更多