2017-08-02 31 views
2

選擇列假定有一個索引和矩陣L在numpy的

>>> index 
(array([0, 2, 3, 3]), array([0, 2, 2, 3])) 
>>> L 
array([[ 1, -1, -5, -10], 
    [-15, 0, -1, -5], 
    [-10, -15, 10, -1], 
    [ -5, -10, 1, 15]]) 

我想根據[1],我試圖索引來選擇列:

>>> L[:,index[1]] 
array([[ 1, -5, -5, -10], 
    [-15, -1, -1, -5], 
    [-10, 10, 10, -1], 
    [ -5, 1, 1, 15]]) 

但結果不是我預期的,我期望的是:

>>> for i in index[1]: 
...  print L[:,i] 
[ 1 -15 -10 -5] 
[-5 -1 10 1] 
[-5 -1 10 1] 
[-10 -5 -1 15] 

我怎樣才能得到預期的結果沒有for循環?爲什麼這個意外的結果出來了?謝謝。

回答

3

您只需transpose它:

L[:,index[1]].T 
#   ^transpose

通過使用轉置,列列,反之亦然。所以在這裏(你可以在選擇之前進行轉置,然後使用L.T[index[1],:]),我們首先進行選擇,然後將列轉爲行。

這將產生:

>>> L[:,index[1]].T 
array([[ 1, -15, -10, -5], 
     [ -5, -1, 10, 1], 
     [ -5, -1, 10, 1], 
     [-10, -5, -1, 15]]) 

注意窗簾後面當然還有一些循環,即完成。但是這些都是在Python之外完成的,因此效率更高。