【问题标题】:numpy searchsorted lexicographic on slicenumpy searchsorted lexicographic on slice
【发布时间】:2014-05-15 21:51:27
【问题描述】:

假设我有一个已经排序的 numpy 数组。

>>> x
array([[1, 2, 3, 1],
       [2, 2, 3, 2],
       [2, 3, 3, 4],
       [3, 4, 4, 4],
       [4, 5, 5, 5]])

我想根据前 两个 列进行右手平分。

类似(准代码)numpy.searchsorted(x, [2, 2], side='right') 应该返回 2,即[2, 2, 3, 2][2, 3, 3, 4] 之间的索引。

【问题讨论】:

    标签: python search numpy scipy binary-search


    【解决方案1】:

    这个怎么样:

    >>> i1 = np.searchsorted(x[:, 0], 2, side='l')
    >>> i2 = np.searchsorted(x[i1:, 0], 2, side='r')
    >>> i3 = np.searchsorted(x[i1:i1+i2, 1], 2, side='r')
    >>> i1 + i3
    2
    

    【讨论】:

    • 不应该是 i1 = np.searchsorted(x[:, 0], 2, side='r') ; i2 = np.searchsorted(x[i1:, 1], 2, side='r');返回 i1 + i2?
    • 尝试使用第一列 [1, 2, 2, 2, 4] 和第二列 [1, 2, 2, 3, 5]。您的方法将返回i1 = 4i2 = 0 组合为i1 + i2 = 4,我认为这不是您想要的。打三个电话你会得到i1 = 1i2 = 3i3 = 2,返回i1 + i3 = 3,我认为这是正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-09
    • 2022-11-14
    • 2014-04-27
    • 1970-01-01
    相关资源
    最近更新 更多