如何从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)
我这样做是因为我想使用的库似乎需要这个。
答案 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]])