【问题标题】:Sorting one multidimensional array according to another根据另一个多维数组排序
【发布时间】:2020-05-22 14:14:40
【问题描述】:

例如我有

array1 = np.array([[3,2,1],[2,1,3]])

array2 = np.array([[4,5,6],[7,8,9]])

我对array1进行排序以获得[[1,2,3],[1,2,3]],我想对array2进行排序以获得[[6,5,4],[8,7,9]]

我尝试做的是:

index = np.argsort(array1,axis = 1)

array2[index]

但它不起作用,非常感谢任何帮助

【问题讨论】:

  • 所以排序函数使用了一个名为key的参数来了解一下

标签: python sorting


【解决方案1】:

np.argsort 是正确的方向。使用以下代码:

array1 = np.array([[3,2,1],[2,1,3]])
array2 = np.array([[4,5,6],[7,8,9]])

def order_by(arr1, arr2):
    order = np.argsort(arr1)
    return [arr2[o] for o in order ]

[order_by(a1, a2) for (a1, a2) in zip(array1, array2) ]

结果是:

[[6, 5, 4], [8, 7, 9]]

【讨论】:

    【解决方案2】:

    下面是我的实现,没有使用任何内置方法。时间复杂度为 O(n^2)

    def weird_sort(lst1,lst2):
        sorted_lst2=[]
        sorted_lst1=[]
        lst3=[i for i in lst1]
        while len(lst1)>0:
            _min=lst1[0]
    
            for i in range(1,len(lst1)):
                if lst1[i] <_min:_min=lst1[i]
            sorted_lst2.append(lst2[lst3.index(_min)])
            lst1.remove(_min)
            sorted_lst1.append(_min)
    
        return sorted_lst1,sorted_lst2
    

    这个函数可以这样调用:

    import numpy as np
    array1 = np.array([[3,2,1],[2,1,3]])
    array2 = np.array([[4,5,6],[7,8,9]])
    
    for i,j in zip(array1,array2):
        print(list(weird_sort(list(i),list(j))))
    

    按要求输出:

    [[1, 2, 3], [6, 5, 4]]
    [[1, 2, 3], [8, 7, 9]]
    

    编辑:修改函数返回位以获取所需格式的输出。我的不是你想要的,但这样做可以解决问题。

    希望这会有所帮助。

    【讨论】:

    • 是的,这很有帮助
    猜你喜欢
    • 2020-05-30
    • 2020-07-14
    • 2013-11-10
    • 1970-01-01
    • 2015-06-08
    • 1970-01-01
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多