2016-12-30 37 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]])