如何将一行2d numpy数组作为2d数组

时间:2013-05-15 02:17:44

标签: python arrays numpy

如何从NxM numpy数组中选择一行大小为1xM的数组:

> import numpy
> a = numpy.array([[1,2], [3,4], [5,6]])
> a
array([[1, 2],
       [3, 4],
       [5, 6]])
> a.shape
(e, 2)
> a[0]
array([1, 2])
> a[0].shape
(2,)

我想要

a[0].shape == (1,2)

我这样做是因为我想使用的库似乎需要这个。

2 个答案:

答案 0 :(得分:4)

如果您已有,请致电.reshape()

>>> a = numpy.array([[1, 2], [3, 4]])
>>> b = a[0]
>>> c = b.reshape((1, -1))
>>> c
array([[1, 2]])
>>> c.shape
(1, 2)

你也可以使用一个范围来保持数组的二维性:

>>> b = a[0:1]
>>> b
array([[1, 2]])
>>> b.shape
(1, 2)

请注意,所有这些都具有相同的后备存储。

答案 1 :(得分:4)

如果您有某种形状(2,)并且想要添加新轴以使形状为(1,2),则最简单的方法是使用np.newaxis

a = np.array([1,2])

a.shape
#(2,)

b = a[np.newaxis, :]

print b
#array([[1,2]])

b.shape
#(1,2)

如果您有某种形状(N,2),并希望使用相同的维度对其进行切片以获得形状为(1,2)的切片,那么您可以使用一系列长度1作为您的切片而不是一个索引:

a = np.array([[1,2], [3,4], [5,6]])

a[0:1]
#array([[1, 2]])

a[0:1].shape
#(1,2)

另一个技巧是某些函数有keepdims选项,例如:

a
#array([[1, 2],
#       [3, 4],
#       [5, 6]])

a.sum(1)
#array([ 3,  7, 11])

a.sum(1, keepdims=True)
#array([[ 3],
#       [ 7],
#       [11]])