2016-05-13 56 views
2

簡單的問題,但我似乎無法得到它的工作。 我有一個形狀的數組(2000,1)。從這個數組中,我想計算每40行99個百分位數,並返回一個相同長度的布爾數組,其中所有高於第99個百分位的數據都是真的,其餘數據爲假。 對於第40我可以這樣做:在python數組中計算每設定時間間隔的百分位數

a = np.random.rand(2000,1) 
maxper40 = a[0:40] > np.percentile(a[0:40], 99) 

我可以做這樣的事情來獲得移動窗口:

windowSize = 40 
for i in range(0,len(a)-windowSize+1): 
    print max(a[i:i+windowSize]) 

我將如何通過與40的間隔陣列移動,計算每個區間99百分位數並返回一個與輸入長度相同的布爾數組?

非常感謝!

回答

2

您可以通過50x40重塑你的陣列,並得到各位數:

a.reshape(50, 40) > np.percentile(a.reshape(50, 40), 99, axis=0) 

這將返回的大小(50,40)的陣列。如果你想一維數組,你可以調用之後拉平:

(a.reshape(50, 40) > np.percentile(a.reshape(50, 40), 99, axis=0)).flatten() 
+0

我不得不轉用'.T'陣列和在壓平加上''F''標誌,然後它的工作就像一個魅力,謝謝! – cf2

+0

很高興它工作。不用謝。 :) – ayhan