2013-02-01 37 views
13

可能重複:
numpy: access an array by column獲取只有特定列的每一行中的numpy的陣列

我有一個numpy的陣列(numpy的導入爲NP)

gona = np.array([[ 1, 2, 3], 
     [ 4, 5, 6], 
     [ 7, 8, 9], 
     [10, 11, 12]]) 

我可以通過gona [1] [:]獲得第1行整列的值。

陣列([4,5,6])

但是,如果我試圖讓所有行的特定列的所有值(比方說我希望每行第1列的值)我會嘗試gona [:] [1]。但我從這裏得到的結果與之前一樣。

這可能是什麼原因?我如何在numpy中做這樣的事情?

+1

沒有。 我想知道爲什麼兩種方法都會給出相同的結果 – maheshakya

回答

28

你真的想這樣做:

>>> a 
array([[ 1, 2, 3], 
     [ 4, 5, 6], 
     [ 7, 8, 9], 
     [10, 11, 12]]) 
>>> a[:,1] 
array([ 2, 5, 8, 11]) 

a[:]剛剛返回整個數組,所以後來a[:][1]將退回第二排a。我認爲這就是你的困惑所在。

有關索引多維數組的更多信息,請參閱Tentative Numpy Tutorialthis部分。

+2

'a [:] [1]'選擇第二行 –

+0

糟糕。你是對的。我糾正了這一點。 –

+1

這樣做的工作。 謝謝 – maheshakya

-1

像這樣:

gona = numpy.array([[ 1, 2, 3], 
     [ 4, 5, 6], 
     [ 7, 8, 9], 
     [10, 11, 12]]) 

# List comprehension, just get each element in 'gona', and then get first element in that list 
out = [x[0] for x in gona] 

print out 

輸出:

>>> 
[1, 4, 7, 10] 
>>> 
6

在大括號的位置上似乎存在一些細微的混淆,gona[:][1]首先選擇數組中的所有內容,然後從該數組中選擇第二行。要選擇特定列你把指數由逗號分隔同一方括號內:

gona = np.array([[ 1, 2, 3], 
     [ 4, 5, 6], 
     [ 7, 8, 9], 
     [10, 11, 12]]) 

gona[1,:] 
Out[21]: array([4, 5, 6]) 

gona[:,1] 
Out[22]: array([ 2, 5, 8, 11]) 

gona[:,0] 
Out[23]: array([ 1, 4, 7, 10]) 

你也可以只選擇行的範圍,例如

gona[0:2,0] # only take the two first rows of the first column 
Out[24]: array([2, 5]) 
+0

單獨感謝您選擇一系列行代碼:) – tieorange