2013-05-15 31 views
3

如何選擇從N×M的numpy的陣列中的行作爲規模1xM的數組:我如何獲得一個2D numpy的陣列的一行作爲二維數組

> 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,)的東西,你想添加一個新的軸使得成型是(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]]) 
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) 

注意,所有這些將有相同的後備商店。

相關問題