3

如何从 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)

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

4

2 回答 2

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)

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

于 2013-05-15T02:20:08.777 回答
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)并且想要以相同的维度对其进行切片以获得具有 shape 的切片(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]])
于 2013-05-15T02:39:47.300 回答