根据一个多维数组对另一个多维数组进行排序



例如我有

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

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

我尝试做的是以下内容:

index = np.argsort(array1,axis = 1)
array2[index]

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

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

下面是我的实现,不使用任何 in bulit 方法。时间复杂度为 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]]

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

希望这有帮助。

相关内容

最新更新