2016-07-23 162 views
3

下面的示例數組,如何逐列分割以獲得以下內容(例如第3列)[0, 0, ..., 1338, 1312, 1502, 0, ...] 尋找最有效的方法,謝謝!切片numpy陣列獲得第n列

>>> r 
array([[[ 0, 0, 0], 
     [ 0, 0, 0], 
     [ 0, 0, 0], 
     [ 0, 0, 0], 
     [ 0, 0, 0], 
     [ 0, 0, 0]], 

     [[ 0, 0, 1338], 
     [ 0, 0, 1312], 
     [ 0, 0, 1502], 
     [ 0, 0, 0], 
     [ 0, 0, 0], 
     [ 0, 0, 0]], 

     [[ 0, 0, 1400], 
     [ 0, 0, 1277], 
     [ 0, 0, 1280], 
     [ 0, 0, 0], 
     [ 0, 0, 0], 
     [ 0, 0, 0]]], dtype=uint16) 
+2

https://docs.scipy.org/doc/numpy-dev/user/quickstart.html# indexing-slicing-and-iterating –

回答

7

對於任何尺寸的通用ndarray,一個辦法是 -

arr[...,n] 

爲了得到一個平坦的版本,使用.ravel()方法 -

arr[...,n].ravel() 

採樣運行 -

In [317]: arr 
Out[317]: 
array([[[[2, 1, 2], 
     [0, 2, 3], 
     [1, 0, 1]], 

     [[0, 2, 0], 
     [3, 1, 2], 
     [3, 3, 1]]], 


     [[[2, 0, 0], 
     [0, 2, 3], 
     [3, 3, 1]], 

     [[2, 0, 1], 
     [2, 3, 0], 
     [3, 3, 2]]]]) 

In [318]: arr[...,2].ravel() 
Out[318]: array([2, 3, 1, 0, 2, 1, 0, 3, 1, 1, 0, 2]) 
2

Numpy支持像matlab這樣的「分號符號」。 你的情況,你應該能夠做拿第三列:
x = r[:,:,2]
然後
a = numpy.concatenate([x[0],x[1],x[2]])

+2

您可以使用'x.flatten()'而不是'numpy.concatenate([x [0],x [1],x [2]])''。 – Akavall

+0

是的,你說得對,謝謝! – magicleon