2012-08-01 103 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