2015-04-12 4 views
0

Я полностью потерял с точки зрения эффективного сбора данных в реальном времени. То, что я пытаюсь сделать, - назначить заданное значение в словаре (или какой-либо другой структуре, если есть более эффективный).Python В реальном времени Разбиение данных

Например, если я знаю, что диапазон дат находится в диапазоне от 0 до 100 (или некоторые другие настраиваемые ограничения), и у меня есть десять ящиков, так что ящик 1 включает от 0 до 10 и т. Д., Что было бы лучшей реализацией, чтобы я мог просто отбросьте значение в структуру данных, и он автоматически узнает здесь, чтобы поставить его?

Я посмотрел here, но это когда у вас есть все данные вместе, а не когда он вступает в реальное время.

Мой текущий дизайн прост в цикле и определяет, к какой корзине он принадлежит, но это так медленно, когда у меня много входящих точек данных для итерации, которые имеют петли 100k.

+0

структура данных вы ищете является [кД дерево] (http://en.wikipedia.org/wiki/K-d_tre е). (AKA a * двоичное дерево поиска *, если у вас есть только одно измерение) – roippi

ответ

2

Я думаю bisect может быть то, что вы хотите, это основано на примере в Документах

from bisect import bisect 

d = {"A": 0, "B": 0, "C": 0, "D": 0, "E": 0, "F": 0} 


def grade(score, breakpoints=[70, 80, 90, 100], grades='FBCDA'): 
    i = bisect(breakpoints, score) 
    return grades[i] 


for n in [66, 67, 77, 88, 80, 90, 91,100]: 
    d[grade(n)] += n 
print(d) 
{'A': 100, 'C': 168, 'B': 77, 'E': 0, 'D': 181, 'F': 145} 
+0

import bisect.bisect as bisect – kpie

1

Я написал это, как говорят, что бен 0 = [Min: (Max-Min)/Nbins)

class bins(): 
    def __init__(self,Min,Max,Nbins): 
     self.bins = {} 
     self.Min=float(Min) 
     self.Max=float(Max) 
     self.Nbins=Nbins 
     for k in range(0,Nbins): 
      self.bins[k]=[] 
    def AddToMap(self,n): 
     if(n<self.Min or n>=self.Max): 
      print("Object out of map range. [ "+str(n)+" ]") 
     else: 
      k = int((n-self.Min)/((self.Max-self.Min)/float(self.Nbins))) 
      self.bins[k].append(n) 

    def prt(self): 
     for k in self.bins: 
      print self.bins[k] 

b = bins(0,100,10) 
b.AddToMap(1) 
b.AddToMap(13) 
b.AddToMap(21) 
b.AddToMap(14) 
b.AddToMap(13) 
b.AddToMap(9) 
b.AddToMap(11) 
b.AddToMap(10) 
b.AddToMap(0) 
b.AddToMap(100) 
b.AddToMap(42) 

b.prt() 

получая

Object out of map range. [ 100 ] 
[1, 9, 0] 
[13, 14, 13, 11, 10] 
[21] 
[] 
[42] 
[] 
[] 
[] 
[] 
[] 
Смежные вопросы