Python 基于另一个相同形状的二维数组对二维numpy数组(按行)排序

Python 基于另一个相同形状的二维数组对二维numpy数组(按行)排序,python,arrays,sorting,numpy,Python,Arrays,Sorting,Numpy,具有两个阵列: X = np.array([[1,2,3], [2,3,1]]) X array([[1, 2, 3], [2, 3, 1]]) Y = np.array([['A','B', 'C'], ['A','B', 'C']]) Y array([['A', 'B', 'C'], ['A', 'B', 'C']], dtype='|S1') 我试图根据X的值逐行对Y进行排序,而不在每一行中循环,即 xord = X.argsort() for

具有两个阵列:

X = np.array([[1,2,3], [2,3,1]])
X
array([[1, 2, 3],
       [2, 3, 1]])
Y = np.array([['A','B', 'C'], ['A','B', 'C']])
Y
array([['A', 'B', 'C'],
       ['A', 'B', 'C']], 
     dtype='|S1')
我试图根据X的值逐行对Y进行排序,而不在每一行中循环,即

xord = X.argsort()

for i in range(X.shape[0]):
    print Y[i][xord[i]]

['A' 'B' 'C']
['C' 'A' 'B']

是否有一种更有效的方法可以根据X对应的行顺序对数组Y进行排序?

首先,您可以使用
np.argsort
在排序后根据这些位置获取
X
元素的索引,然后您可以使用
np.take()根据
X
的索引从
Y
获取元素:

>>> s=np.argsort(X)
>>> np.take(Y,s)
array([['A', 'B', 'C'],
       ['C', 'A', 'B']], 
      dtype='|S1')

我认为这并不能回答问题。这如何像for循环那样保持行的对齐?尝试使用Y,如下所示,它更清楚地显示了问题Y=np.array([[A','B','C'],['X','Y','Z']))