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']))