2017-04-26 57 views
3

我有這樣的陣列:提取陣列

arr = np.array([[[ -1., -1., -1., 0., 0., 0.], 
       [ 0.1, 0.1, 0.1, 2., 3., 4.]], # <-- this one 

       [[ -1., -1., -1., 0., 0., -1.], 
       [ 0.1, 0.1, 0.1, 16., 17., 0.1]], # <-- and this one 

       [[ -1., -1., -1., 0., 0., 0.], 
       [ 0.1, 0.1, 0.1, 4., 5., 6.]], # <-- and this one 

       [[ 0., 0., 0., -1., 0., 0.], 
       [ 1., 2., 3., 0.1, 1., 2.]], # <-- and this one 

       [[ -1., -1., 0., 0., 0., 0.], 
       [ 0.1, 0.1, 1., 9., 10., 11.]]]) # <-- and the last one 

我想提取每個陣列中的第二陣列,並且所述結果應該是如下:

res = [[ 0.1, 0.1, 0.1, 2., 3., 4.], 
     [ 0.1, 0.1, 0.1, 16., 17., 0.1], 
     [ 0.1, 0.1, 0.1, 4., 5., 6.], 
     [ 1., 2., 3., 0.1, 1., 2.], 
     [ 0.1, 0.1, 1., 9., 10., 11.]] 

欲在一行代碼得到res,我試過,但沒有奏效

arr[:][1] # select the element 1 in each array 
# I got 
array([[ -1. , -1. , -1. , 0. , 0. , -1. ], 
     [ 0.1, 0.1, 0.1, 16. , 17. , 0.1]]) 

任何人都可以解釋,爲什麼?

我發現的唯一解決方案是明確指出我不喜歡的每個索引(arr[0][1]...)。

+0

'解析度= [x [1] for x in arr]'? – depperm

回答

5

這是一個3D陣列和你想選擇第二軸的第二個元素,提取沿軸的其餘所有元素。所以,它的那樣簡單 -

arr[:,1,:] 

我們可以跳過列出:拖尾的軸,因此進一步簡化了 -

arr[:,1] 

採樣運行 -

In [360]: arr 
Out[360]: 
array([[[ -1. , -1. , -1. , 0. , 0. , 0. ], 
     [ 0.1, 0.1, 0.1, 2. , 3. , 4. ]], 

     [[ -1. , -1. , -1. , 0. , 0. , -1. ], 
     [ 0.1, 0.1, 0.1, 16. , 17. , 0.1]], 

     [[ -1. , -1. , -1. , 0. , 0. , 0. ], 
     [ 0.1, 0.1, 0.1, 4. , 5. , 6. ]], 

     [[ 0. , 0. , 0. , -1. , 0. , 0. ], 
     [ 1. , 2. , 3. , 0.1, 1. , 2. ]], 

     [[ -1. , -1. , 0. , 0. , 0. , 0. ], 
     [ 0.1, 0.1, 1. , 9. , 10. , 11. ]]]) 

In [361]: arr[:,1] 
Out[361]: 
array([[ 0.1, 0.1, 0.1, 2. , 3. , 4. ], 
     [ 0.1, 0.1, 0.1, 16. , 17. , 0.1], 
     [ 0.1, 0.1, 0.1, 4. , 5. , 6. ], 
     [ 1. , 2. , 3. , 0.1, 1. , 2. ], 
     [ 0.1, 0.1, 1. , 9. , 10. , 11. ]]) 
+0

恭喜! – kmario23

+1

@ kmario23謝謝!愛上這些「零」;) – Divakar

2

我對numpy一無所知,因此可能有更簡單的方法。但一個簡單的列表理解將工作:

[a[1] for a in arr]