用另外两个列表在Python(numpy)中对数组进行排序

时间:2014-03-25 00:26:15

标签: python arrays sorting numpy

我有一个向量数组(或者为了简单起见,你可以假设我有一个数组)基于某些计算我制作了2个不同的数组,它们具有相同大小的第一个数组,其中包含0到1之间的数字(对于第一个数据的每个索引)数组第二个和第三个包含汉明距离的数组)现在我想同时根据第二个和第三个数组排序第一个数组。 由于第二个和第三个数组包含0到1之间的值,我想排序第一个数组,以便每个元素的第二个和第三个数组的最近距离为0.5。

如果我想做一些现实的例子:

first = numpy.array([1,2,3])    
second = numpy.array([0.2, 0.5, 0.97])   
third = numpy.array([0.3, 0.45, .98])

first = sort(first, second, third)

之后,首先必须是这样的:[2,1,3] 为什么我要这个?因为第二个[1]和第三个[1]是最接近(0.5,0.5)的点(通过关闭我的意思是像欧几里德距离或任何其他一个)并且在索引号2之后索引号0具有第二个关闭距离点(0.5,0.5)。

或者如果我有second = numpy.array([0.62, 0.61, 0.97])third = numpy.array([0.49, 0.72, 0.97])我希望排序数组返回索引,如[0,1,2],那么排序后的第一个数组就像这个[1,2,3]为什么?因为第二个[0]和第三个[0]是距离点(0.5,0.5)最近的点,依此类推。

1 个答案:

答案 0 :(得分:2)

import numpy as np

first = np.array([1,2,3])
second = np.array([0.2, 0.5, 0.97])
third = np.array([0.3, 0.45, .98])

sqdist = (second-0.5)**2 + (third-0.5)**2
idx = np.argsort(sqdist)
first = first[idx]
print(first)

产量

[2 1 3]