切片2d numpy数组

时间:2018-05-31 10:03:51

标签: python numpy

我有一个形状为padded_train_x的numpy数组(2500,500)

问题是, 当我试图获得这个数组元素的形状时 padded_train_x[0].shape它输出(500,),但当我以padded_train_x[0:1]运行时,它会输出(1,500)。为什么会这样?

我正在尝试使用keras在LSTM模型中进行预测,但我必须使用padded_train_x[0:1]作为输入,而不仅仅是padded_train_x[0]

2 个答案:

答案 0 :(得分:2)

这是因为通过padded_train_x[0:1]制作切片得到2d数组:

a = np.linspace(1024).reshape(64,-1)
b = a[0]
c = a[0:1]

b
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15])
b[0]
0

c
array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15]])
c[0]
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15])

答案 1 :(得分:1)

至于为什么会这样,让我们​​等一个更专家的人,不确定是否真的有原因。

NumPy在切片时保留尺寸,并在编制索引时将其丢弃。它实际上是一个Python的东西,列表也是如此。

您可以使用np.squeeze

删除单维轴
a = np.ones((2500, 500))

a[0].shape
(500,)

a[0:1].shape
(1, 500)

a[0:1].squeeze().shape
(500,)