【问题标题】:Minimum difference between non-equal elements in integer array整数数组中不相等元素之间的最小差异
【发布时间】:2013-03-04 09:17:00
【问题描述】:

我确实有一个包含整数数组的列表,其中每个元素的值 item 代表一个数组):

unq  = numpy.unique(item)
mind = numpy.amin(
        (numpy.append(unq, [999]))
       -(numpy.append([-999],unq))
       )

使用numpy,我首先得到唯一元素的排序数组。在末尾添加高正数和在开头添加高负数后,我将这两个数组相减并得到最小值。

有没有更快的方法来做到这一点?

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    我认为您的解决方案是可以的,除了使用numpy.append 而不是您最好使用np.diff,例如np.diff(np.unique(a))

    In [1]: import numpy as np
    
    In [2]: a = np.random.randint(0,100,size=50)
    
    In [4]: np.unique(a)
    Out[4]: 
    array([ 0,  2,  3,  5,  7,  8, 15, 18, 20, 22, 23, 27, 30, 31, 32, 33, 37,
           38, 42, 43, 45, 48, 49, 57, 59, 62, 65, 70, 74, 75, 76, 78, 79, 80,
           83, 84, 88, 91, 93, 94, 96, 98])
    
    In [5]: np.diff(np.unique(a))
    Out[5]: 
    array([2, 1, 2, 2, 1, 7, 3, 2, 2, 1, 4, 3, 1, 1, 1, 4, 1, 4, 1, 2, 3, 1, 8,
           2, 3, 3, 5, 4, 1, 1, 2, 1, 1, 3, 1, 4, 3, 2, 1, 2, 2])
    
    In [6]: np.diff(np.unique(a)).min()
    Out[6]: 1
    

    【讨论】:

    • 谢谢。我没有提到它,但某些数组中只有 1 个唯一元素。对于这种情况,这会导致错误,因为我不能使用空数组(np.diff() 的结果作为min() 的输入。Python 中有类似coalesce 的东西吗?
    • 我用numpy.amin(numpy.diff(numpy.append(unq,999))) where unq=numpy.unique(item)
    • @twn08 在这种情况下,您可以分两步完成:1) diffs = np.diff(np.unique(a)) 然后 2) min_dist = diffs.min() if diffs else 0。如果您愿意,也可以指定None,例如...if diffs else None
    猜你喜欢
    • 1970-01-01
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多