拆分多个值的numpy数组?

时间:2023-02-04 21:19:50

Based on my question Fastest way to approximately compare values in large numpy arrays? I was looking for ways to split an array as I wanted. I have a sorted array (2D, sorted by values in one column), and want to split it into multiple arrays. Not of equal length based on index, but of equal range in values. The closest question I found is Split array at value in numpy but I'd like to do something a bit different. Say I have (1D example):

基于我的问题最快的方法来近似比较大型numpy数组中的值?我正在寻找各种方法来分割我想要的阵列。我有一个排序数组(2D,按一列中的值排序),并希望将其拆分为多个数组。基于索引的长度不等,但值的范围相等。我找到的最接近的问题是在numpy值处的Split数组,但我想做一些不同的事情。说我有(1D例子):

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

and I want to split it into ranges [0,10) [10,20) [20,30] so it becomes

我想把它分成范围[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]

1 个解决方案

#1


6  

The 1d case can be done like this

1d案例可以像这样完成

>>> 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)

This also works in 2d, if I understood your question correctly, for example:

如果我正确理解你的问题,这也适用于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. ]])]

#1


6  

The 1d case can be done like this

1d案例可以像这样完成

>>> 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)

This also works in 2d, if I understood your question correctly, for example:

如果我正确理解你的问题,这也适用于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. ]])]