【问题标题】:Sort array in Python (numpy) by two other lists按其他两个列表对 Python (numpy) 中的数组进行排序
【发布时间】:2014-03-25 00:26:14
【问题描述】:

我有一个向量数组(或者为简单起见,你可以假设我有一个数组)基于一些计算我制作了 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] 为什么我应该有这个?因为 second[1] 和 third[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] 为什么?因为 second[0] 和 third[0] 是离点 (0.5,0.5) 最近的点,依此类推。

【问题讨论】:

    标签: python arrays sorting numpy


    【解决方案1】:
    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]
    

    【讨论】:

    • 我不认为这个解决方案可以解决我的问题,因为第二个和第三个数组对我来说具有相同的价值,
    • 您能否再举一个(更长的?)firstsecondthird 的示例以及想要的结果?
    • 例如,如果我有 second = numpy.array([0.62, 0.61, 0.97]) 和 third = numpy.array([0.49, 0.72, 0.97]) 您的解决方案将返回 [1,0 ,2] 但我想返回 [0,1,2]
    • 我不知道如何澄清我的问题以使自己理解,您必须假设第二个和第三个数组是相同的值键我想以某种方式对第一个数组进行排序,每个等效索引第二个和第三个数组与点 (0.5, 0.5) 的最小距离类似!清楚了吗?
    • 那么也许您正在寻找np.lexsort([np.abs(second-0.5), np.abs(third-0.5)])。如果这不是您想要的,请显示您用于获取 [0,1,2] 的计算。
    猜你喜欢
    • 2012-12-07
    • 2019-09-24
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    • 2011-02-19
    • 2021-10-15
    相关资源
    最近更新 更多