Feld mit ca 800 werten überprüfen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Xisto
User
Beiträge: 23
Registriert: Dienstag 8. Juli 2008, 09:06

Hi
ich such in einem Feld was über 300000 Werte hat die stelle wo min. 800 mal die null in Folge kommt. Leider kenn ich nur einen weg wie unten angezeigt der ist aber bei 800 werten etwas unprarktisch. Kennt jemand eine möglich keit wie ich viele gleiche werte in einem Feld überprüfen kann.
Ziel von mir ist eine horonzontale Line von min 800pixeln zu finden.

Code: Alles auswählen

img=Image.open('c:\\test.bmp')
img = img.convert("L")

size = img.size
srcImg = img.getdata()
zaehler = size[0] * size[1]
srcImg = list(img.getdata())

for x in range(0,zaehler+1,3):
      srcImg2 = srcImg[x:x+3]
      if srcImg2 == [0,0,0] :
               print 'gefunden'
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Wieso nicht einfach über einer Liste iterieren und einen Zähler laufen lassen? Zusätzlich die Startposition einer Sequenz merken und bei Erreichen einer Grenze dann entsprechend rausspringen (oder was auch immer tun).
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Du könntest auch das Feld mittels join() in eine Zeichenkette umwandeln und dann prüfen, an welcher Stelle '000'*800 vorkommt:

Code: Alles auswählen

# Dummy-Daten erzeugen
from random import randrange

randompos = randrange(299000)
data = [randrange(256) for k in xrange(randompos)]+[0]*800+ \
       [randrange(256) for k in xrange(299200-randompos)]

# Jetzt kommt's:
try:
    nullpos = "".join(['%03i' %n for n in data]).index('0'*2400)//3
except ValueError:
    nullpos = None

# Das war's:
print nullpos
Antworten