numpy-array: Werte extrahieren

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.
Benutzeravatar
tromai
User
Beiträge: 92
Registriert: Mittwoch 26. April 2006, 11:20

numpy-array: Werte extrahieren

Beitragvon tromai » Dienstag 13. Juni 2006, 15:01

Hallo zusammen,

ich habe eine Frage zu numpy-arrays.
Wie kann ich einen Array auf einen bestimmten Wert durchforsten und diesen Wert falls er gefunden wird ausgeben bzw. manipulieren. Allerdings ohne eine Schleife zu verwenden.
Mit arr.any() kann ich auf einen Wert prüfen. Aber wie kann ich dann die gefundenen manipulieren.

Danke für die Hilfe
BlackJack

Beitragvon BlackJack » Dienstag 13. Juni 2006, 20:30

Wären "masked arrays" eventuell eine Lösung?

http://numpy.sourceforge.net/numdoc/HTM ... fId-303698
Benutzeravatar
tromai
User
Beiträge: 92
Registriert: Mittwoch 26. April 2006, 11:20

Beitragvon tromai » Mittwoch 14. Juni 2006, 08:54

Danke.
Das werde ich mir auf jeden Fall mal genauer ansehen. Einen Teil des Problems sollte es auf jeden Fall lösen. Wenn man einen genauen Zahlenwert angibt auf den er prüft, dann sollte es mit

Code: Alles auswählen

import MA
arrx = MA.masked_values(arr, 50217)
arrx filled(arrx, 0)

funktionieren. Wie man Wertebereiche maskiert denke ich werde ich dann auch noch finden :P
Benutzeravatar
tromai
User
Beiträge: 92
Registriert: Mittwoch 26. April 2006, 11:20

Beitragvon tromai » Mittwoch 14. Juni 2006, 10:23

Ok, so kann man sich täuschen. Mit dem scipy-Array, das ich erzeugt habe hat MA scheinbar Probleme.
Wenn ich das Array innerhalb masked_values() erzeuge, dann läuft es:

Code: Alles auswählen

x = MA.masked_values ([[1.0, 50217, 3.0, 4.0],[1.0, 50217, 3.0, 4.0],[1.0, 50217, 3.0, 50217]], 50217)
print MA.filled(x, 0)


Ergebnis:
[code=][[ 1., 0., 3., 4.,]
[ 1., 0., 3., 4.,]
[ 1., 0., 3., 0.,]][/code]

Einfach das Scipy-Array in ein MA-Array umwandeln und es läuft:

Code: Alles auswählen

arrMA = MA.array(arrSCIPY, typecode='i')
x = MA.masked_values (arrMA, 50217)
print MA.filled(arrMA, 0)
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Mittwoch 14. Juni 2006, 11:22

Hoi,

Es gibt kein "scipy-array", da scipy das array von numpy nimmt. Und so gibt es auch masked-arrays nur von numpy. matplotlib kann mit masked arrays umgehen (siehe hier, das Beispiel ist von mir, aber etwas veraltet).

Scipy bietet aber "ma" an:

Code: Alles auswählen

>>> print ma.__doc__
MA: a facility for dealing with missing observations
MA is generally used as a numpy.array look-alike.
by Paul F. Dubois.

Copyright 1999, 2000, 2001 Regents of the University of California.
Released for unlimited redistribution.
Adapted for numpy_core 2005 by Travis Oliphant and
(mainly) Paul Dubois.
>>> dir(ma) #sollte Einiges anbieten, was Dein Herz höher schlagen läßt, oder?

Gruß,
Christian
Benutzeravatar
tromai
User
Beiträge: 92
Registriert: Mittwoch 26. April 2006, 11:20

Beitragvon tromai » Mittwoch 14. Juni 2006, 14:39

Bin noch ein Newbie was Python angeht. Wusste das mit dir() garnicht. Das eröffnet ja ungeahnte Möglichkeiten. Danke für den Hinweis. :P

Code: Alles auswählen

arrMA = MA.masked_greater(arrMA,4095)

Das ist im Prinzip das was ich suchte.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder