我明白通过使用花式索引对另一个1-D数组进行排序ND numpy数组,我可以c = a[:, :, b]
通过b
定义我想按列排序的顺序来执行以下操作
>>> a = np.array([[[ 0, 1], [ 2, 3]], [[ 4, 5], [ 6, 7]], [[ 8, 9], [10, 11]]]) >>> b = np.array([1, 0]) >>> c = a[:, :, b] >>> c array([[[ 1, 0], [ 3, 2]], [[ 5, 4], [ 7, 6]], [[ 9, 8], [11, 10]]])
现在我增加b
了2个输入,以b2
对应我想要对每组2x2进行排序a
>>> b2 = np.array([[1, 0], [0, 1], [1, 0]]) >>> c2 = ? >>> c2 array([[[ 1, 0], [ 3, 2]], [[ 4, 5], [ 6, 7]], [[ 9, 8], [11, 10]]])
我有一组更大的输入,我有一个函数返回一个类似'b2'的数组,它为我提供了我应该获得的信息.因此,我可以知道我应该填写什么c2 = ?
以获得所需的结果?
这是一种花式索引的方法 -
(a[np.arange(a.shape[0])[:,None],:,b2]).transpose(0,2,1)
样品运行 -
In [191]: a Out[191]: array([[[7, 8, 5, 2, 0], [6, 7, 0, 7, 1], [7, 6, 5, 4, 0]], [[8, 0, 5, 5, 7], [4, 3, 4, 0, 1], [8, 6, 3, 2, 4]], [[3, 2, 7, 3, 7], [4, 3, 0, 1, 5], [4, 3, 7, 8, 7]]]) In [192]: b2 Out[192]: array([[1, 2, 4, 3, 0], [4, 2, 0, 1, 3], [1, 3, 4, 0, 2]]) In [193]: (a[np.arange(a.shape[0])[:,None],:,b2]).transpose(0,2,1) Out[193]: array([[[8, 5, 0, 2, 7], [7, 0, 1, 7, 6], [6, 5, 0, 4, 7]], [[7, 5, 8, 0, 5], [1, 4, 4, 3, 0], [4, 3, 8, 6, 2]], [[2, 3, 7, 3, 7], [3, 1, 5, 4, 0], [3, 8, 7, 4, 7]]])