2016-07-23 280 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