我有一个向量数组(或者为了简单起见,你可以假设我有一个数组)基于某些计算我制作了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)最近的点,依此类推。
答案 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]