2016-12-30 38 views
2

對應行考慮陣列a切片2-d陣列逐行與來自相同形狀的陣列

np.random.seed([3,1415]) 
a = np.random.choice(np.arange(8), (2, 4), False) 
print(a) 

[[7 1 4 5] 
[6 2 3 0]] 

我將創建另一個陣列b保持的np.argsort沿每一行的結果。

b = a.argsort(1) 
print(b) 

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

我想要做的a適當片與b產生的a排序版本。它應該是這樣的

idx0 = np.arange(a.shape[0]).repeat(a.shape[1]) 
print(a[idx0, b.ravel()].reshape(a.shape)) 

[[1 4 5 7] 
[0 2 3 6]] 

問題
什麼是切片的2 x 4陣列與上述的時尚另一2 x 4陣列的適當方法?

回答

2

Advanced-indexing的幫助 -

a[np.arange(b.shape[0])[:,None],b] 

採樣運行 -

In [10]: a 
Out[10]: 
array([[7, 1, 4, 5], 
     [6, 2, 3, 0]]) 

In [11]: b 
Out[11]: 
array([[1, 2, 3, 0], 
     [3, 1, 2, 0]]) 

In [12]: a[np.arange(b.shape[0])[:,None],b] 
Out[12]: 
array([[1, 4, 5, 7], 
     [0, 2, 3, 6]])