【问题标题】:How to Reshape 2D to 3D Array in Python? [duplicate]如何在 Python 中将 2D 数组重塑为 3D 数组? [复制]
【发布时间】:2020-11-16 07:02:29
【问题描述】:

为了在 Python 中训练 LSTM,我有一个想要重塑的数组。 这是我的数组的样子:

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

在上面的示例中,有 5 个特征。此时的其他 4 个特征设置为 0,其中一个特征为 1。我想使用 (sample,timestep,feature) 对其进行整形以创建 3D 数组。

我正在使用 numpy,当然,.reshape() 函数会很好用。

【问题讨论】:

  • 它已经是(时间步长,特征)的形状了,不是吗?如果要在此处添加维度,只需执行 x[None,...]。如果您想堆叠其中的一些,请执行np.array(x_list)。
  • @sachinruk 是的,正确,它是时间戳,特征形状。您说我应该通过执行 x[None,...] 添加维度,我不太了解该语法。你能澄清一下吗?
  • 输入None 会在您的情况下添加一个维度以使其成为 (1, 4, 5)。 1 是这种情况下的样本量。你会需要更多的 LSTM 样本。
  • 确实如此,但是,我想更多地询问我应该在哪个方向重塑数组......比如它是否应该是大小 (1,4,5), (4,1,5 ) 或 (4,5,1)。

标签: python arrays numpy lstm reshape


【解决方案1】:

使用.reshape 方法很容易处理numpy:

A = np.array([[0,0,0,0,1], [1,0,0,0,0], [0,0,0,1,0], [0,1,0,0,0]])
A = A.reshape(2, 2, 5)
print(A.shape)

所以新形状是(2, 2, 5)。对于您的数据,您只需为时间步添加一个虚拟维度:

A = np.expan_dims(A, 1)

【讨论】:

  • 嗨,我不想在每个时间步创建两个样本。我想保持当前的格式,但是让它成为三维的。
  • 感谢您更新您的回复。在我的 (2,5) 数组上执行 expand_dims 后,我现在得到一个 (2,1,5) 数组。应该是 (2,1,5) 还是 (2,5,1)?
  • 如何重塑阵列完全取决于您。如果你使用np.expand_dims(A, -1),你会得到(2, 5, 1)。但是对于 lstm,输入形状是(batch_size, time_step, embedding_size)。您的 0 和 1 肯定是嵌入而不是时间步长。
  • 这澄清了事情。 expand_dims 肯定有帮助。 +1 谢谢!
猜你喜欢
  • 1970-01-01
  • 2016-01-17
  • 2017-09-18
  • 1970-01-01
  • 2014-08-05
  • 1970-01-01
  • 1970-01-01
  • 2019-09-12
  • 2016-05-22
相关资源
最近更新 更多