2012-02-22 50 views
3

我試圖在數組內找到聚類(即[n + 1]和[n]之間的差小於某個值的數組內的聚類) 。我有一個numpy數組,它是一系列時間戳記。我可以使用numpy.diff()找到時間戳之間的區別,但是我很難確定沒有循環訪問數組的簇。爲了舉例說明這一點:Python,Numpy - 嘗試根據條件拆分數組

t = t = np.array([ 147, 5729, 5794, 5806, 6798, 8756, 8772, 8776, 9976]) 
dt = np.diff(t) 
dt = array([5582, 65, 12, 992, 1958, 16, 4, 1200]) 

如果我的羣集條件是DT <百噸[1],T [2],並且t [3]將是一個簇和T [5],T [6],並且t [7]將是另一個。我試圖玩弄numpy.where(),但我有越來越調整權分離出集羣的條件沒有成功,即

cluster1 = np.array([5729, 5794, 5806]) 
cluster2 = np.array([8756, 8772, 8776]) 

或沿行的東西。

任何幫助表示讚賞。

回答

7
import numpy as np 

t = np.array([ 147, 5729, 5794, 5806, 6798, 8756, 8772, 8776, 9976]) 
dt = np.diff(t) 
pos = np.where(dt > 100)[0] + 1 
print np.split(t, pos) 

輸出爲:

[array([147]), 
array([5729, 5794, 5806]), 
array([6798]), 
array([8756, 8772, 8776]), 
array([9976])]