【问题标题】:indexing multiple minimum values from a numpy ndarray从 numpy ndarray 索引多个最小值
【发布时间】:2021-08-06 14:02:21
【问题描述】:

我在下面的数据结构中有一组坐标。 如何找到 K 个最小 X 值点的索引? 例如对于以下带有k=3 的数据,输出应类似于[5,4,3]

array([[[463, 445]],
       [[461, 447]],
       [[461, 448]],
       [[ 42,   2]],
       [[ 41,   1]],
       [[ 40, 100]]], dtype=int32)

【问题讨论】:

    标签: python numpy multidimensional-array numpy-ndarray


    【解决方案1】:

    由于您的数据不是nx2 形状,请先对其进行整形并使用argsort 获取排序索引并首先使用索引k

    x = np.array(
        [[[463, 445]],
         [[461, 447]],
         [[461, 448]],
         [[ 42,   2]],
         [[ 41,   1]],
         [[ 40, 100]]])
    
    k = 3
    print (np.argsort(x.reshape(-1,2), axis=0)[:k][:,0])
    

    输出:

    [5 4 3]
    
    • x.reshape(-1,2) :重塑为 n X 2
    • np.argsort(x.reshape(-1,2), axis=0) :按列排序;所以x'sy's 都是独立排序的
    • np.argsort(x.reshape(-1,2), axis=0)[:k]:获取前k个idx
    • np.argsort(x.reshape(-1,2), axis=0)[:k][:,0]:获取x的idx

    要在 y's 上做同样的事情,你需要做的是索引 idx of ys` ie。

    print (np.argsort(x.reshape(-1,2), axis=0)[:k][:,1])
    

    输出:

    array([5, 4, 3])
    

    【讨论】:

    • 谢谢。这是如何优雅地实现 y 轴的? axis=0 似乎推断出第一列,但是 axis=1 并没有做到第二列。我错过了什么?
    • use np.argsort(x.reshape(-1,2), axis=0)[:k][:,1] 解释代码
    猜你喜欢
    • 2018-10-10
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 2021-08-16
    相关资源
    最近更新 更多