需要帮助重塑多维NumPy数组

时间:2018-01-09 18:01:27

标签: python numpy tensorflow tensor

在TensorFlow中,我有一个形状为h的Tensor (?, 14, 14, 512)

我通过tf.reshape(h, [-1, 196, 512])

重塑

导致形状张量(?, 196, 512)。完善。我需要对numpy数组做同样的事情。

我有一个巨大的多维NumPy数组保存到磁盘。它看起来像这样:

features = numpy.ndarray([3000, 14, 14, 2048], dtype=np.float32)

并且需要它的形状:

[3000, 196, 2048]

我怎样才能进行这种转变,以免丢失信息?

numpy.reshape(features, (3000, 196, 2048))吗?

numpy.reshape(features, (-1, 196, 2048))

这两种重塑方法是否会产生相同的结果或有什么区别?

2 个答案:

答案 0 :(得分:0)

两者都有效,会给你相同的结果:

features = np.ndarray([3000, 14, 14, 2048], dtype=np.float32)

# prints (3000, 196, 2048)
print(np.reshape(features, (3000, 196, 2048)).shape)

# prints (3000, 196, 2048)
print(np.reshape(features, (-1, 196, 2048)).shape)

# another option, prints (3000, 196, 2048) as well
print(features.reshape((-1, 196, 2048)).shape)

只要您只有一个-1维度,numpy就能自动计算其值。

答案 1 :(得分:0)

可以写成

a = np.ndarray([3000,14,14,2048])
b = a.reshape((-1, 196, 2048))

形状尺寸可以是-1,并且该值是从数组长度和剩余尺寸推断出来的。

在您的情况下,维度的第一个值必须为3000才能满足剩余的维度。

  

这两种重塑方法是否会产生相同的结果或有什么区别?

这两个应该给你相同的结果