Seite 1 von 1
array werte ändern
Verfasst: Montag 4. April 2016, 15:55
von flip1982
Hallo,
muss ein ursprüngliches tiff verändern. sinn ist es eine 0 und 1 maske aus einer bildaufnahme zu erstellen. habs so probiert:
Code: Alles auswählen
for e in np.nditer([im], [], ['readwrite']):
if e > 23552:
e = 0
print e
else:
e = 1
print e
print im
leider ist das im- array nach der for-schleife unverändert....
wie kann ich das im-array dauerhaft ändern oder ein neues array mit den gewünschten werten erstellen??
würde mich freuen wenn mir jemand helfen kann
vielen dank schonmal
Re: array werte ändern
Verfasst: Montag 4. April 2016, 16:05
von BlackJack
@flip1982: Wenn Du eine Schleife in Python-Code schreibst, dann machst Du in den allermeisten Fällen schon etwas falsch, denn Numpy-Arrays verwendet man ja gerade weil man diese Schleifen vermeiden möchte. Du suchst wahrscheinlich ganz einfach nur: ``mask = im > 23552``. Das erstellt ein Array mit Wahrheitswerten wo überall `True` steht wenn der Wert grösser 23552 ist und überall `False` wo der Wert kleiner oder gleich 23552 ist.
Re: array werte ändern
Verfasst: Montag 4. April 2016, 16:34
von flip1982
@BlackJack:
das habe ich leider nicht hingekriegt mit true und false... und ich wollte eigentlich schon ein array das dann die werte je nach fall mit null und ein ersetzt, da sich so ganz einfach mehrere layer von tiff-arrays miteinander verrechnen lassen... vll weis jemand wie ich ich das machen kann??
Re: array werte ändern
Verfasst: Montag 4. April 2016, 16:53
von BlackJack
@flip1982: Da gibt's eigentlich nichts hinzukriegen, das geht so wie ich das gezeigt habe. Und ob nun 0 und 1 oder `False` und `True` sollte egal sein. Was willst Du denn mit 0 und 1 verrechnen was mit logischen Bitoperationen nicht geht? Ansonsten kannst Du ein Array mit Elementen vom Tyo `bool` auch einfach in eines mit ganzen Zahlen umwandeln.
Re: array werte ändern
Verfasst: Montag 4. April 2016, 17:08
von flip1982
@ BlackJack: habs hingekriegt wie von dir beschrieben. hab jetzt den 0 und 1 layer

Danke!!
Re: array werte ändern
Verfasst: Montag 4. April 2016, 17:11
von pillmuncher
@flip1982: Damit auch andere sehen können, was du hingekriegt hast, und davon lernen können:
Code: Alles auswählen
>>> xs = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> xs
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> ys = xs > 5
>>> ys
array([False, False, False, False, False, True, True, True, True], dtype=bool)
>>> zs = ys * 1
>>> zs
array([0, 0, 0, 0, 0, 1, 1, 1, 1])
Re: array werte ändern
Verfasst: Dienstag 5. April 2016, 07:10
von Sirius3
Statt mit irgendeiner Zahl zu multiplizieren, sollte man den Typ explizit umwandeln:
Re: array werte ändern
Verfasst: Dienstag 5. April 2016, 09:52
von pillmuncher
@Sirius3: Danke. Hatte vergessen, dass es das gibt. Mein numpy-Fu ist leider klein.