【问题标题】:Sort 2D numpy array (by row) based on another 2D array of same shape基于另一个相同形状的 2D 数组对 2D numpy 数组(按行)进行排序
【发布时间】:2015-04-09 21:00:03
【问题描述】:

有两个数组:

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 进行排序?

【问题讨论】:

    标签: python arrays sorting numpy


    【解决方案1】:

    首先可以使用np.argsort根据排序后的位置获取X元素的索引,然后可以根据X的索引使用np.take()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']])跨度>
    猜你喜欢
    • 2011-02-11
    • 2021-05-18
    • 1970-01-01
    • 1970-01-01
    • 2018-08-28
    • 2021-01-21
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    相关资源
    最近更新 更多