2012-08-01 81 views
4

基于我的问题 Fastest way to approximately compare values in large numpy arrays? 我正在寻找方法来拆分数组,我想。我有一个排序数组(2D,按一列中的值排序),并且想将它分成多个数组。基于指数的长度不相等,但值的范围相同。我发现最接近的问题是 Split array at value in numpy 但我想做一些有点不同。说我有(1D示例):在多个值处拆分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] 

回答

4

一维情况下,可以做这样的

>>> 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. ]])] 
+0

对于2D数组,它看起来像我切片适当的列,然后使用searchsorted。 – 2012-08-01 21:04:39