【问题标题】:Split numpy array at multiple values?在多个值处拆分numpy数组?
【发布时间】:2012-08-01 20:33:05
【问题描述】:

根据我的问题 Fastest way to approximately compare values in large numpy arrays? 我正在寻找根据需要拆分数组的方法。我有一个排序数组(二维,按一列中的值排序),并希望将其拆分为多个数组。基于索引的长度不相等,但值的范围相等。我发现的最接近的问题是 Split array at value in numpy 但我想做一些不同的事情。假设我有(一维示例):

[0.1, 3.5, 6.5, 7.9, 11.4, 12.0, 22.3, 24.5, 26.7, 29.9]

我想把它分成范围 [0,10) [10,20) [20,30] 所以它变成了

[0.1, 3.5, 6.5, 7.9] [11.4, 12.0] [22.3, 24.5, 26.7, 29.9]

【问题讨论】:

    标签: python arrays numpy split


    【解决方案1】:

    第一种情况可以这样完成

    >>> A = np.array([0.1, 3.5, 6.5, 7.9, 11.4, 12.0, 22.3, 24.5, 26.7, 29.9])
    >>> split_at = A.searchsorted([10, 20])
    >>> B = numpy.split(A, split_at)
    

    如果我正确理解了您的问题,这也适用于 2d,例如:

    >>> A = array([[  0.1,   0. ],
                   [  3.5,   1. ],
                   [  6.5,   2. ],
                   [  7.9,   3. ],
                   [ 11.4,   4. ],
                   [ 12. ,   5. ],
                   [ 22.3,   6. ],
                   [ 24.5,   7. ],
                   [ 26.7,   8. ],
                   [ 29.9,   9. ]])
    >>> split_at = A[:, 0].searchsorted([10, 20])
    >>> B = numpy.split(A, split_at)
    >>> B
    [array([[ 0.1,  0. ],
           [ 3.5,  1. ],
           [ 6.5,  2. ],
           [ 7.9,  3. ]]),
     array([[ 11.4,   4. ],
           [ 12. ,   5. ]]),
     array([[ 22.3,   6. ],
           [ 24.5,   7. ],
           [ 26.7,   8. ],
           [ 29.9,   9. ]])]
    

    【讨论】:

    • 对于 2D 数组,看起来我切片了相应的列,然后对其使用 searchsorted。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多