Modul bringt fehlermeldung das numpy nicht definiert ist

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
GoldenerReiter
User
Beiträge: 17
Registriert: Montag 14. Juli 2014, 16:13

Hallo,
ich möchte gerne ein modul erstellen. Eigentlich habe ich es schon gemacht, jedoch bekomme ich Fehlermeldungen beim aufrufen der Funktionen
Modul:

Code: Alles auswählen

def areEqual(scrImage1, scrImage2):
    diffImage = scrImage1 - scrImage2
    if not np.any(diffImage):
        return 1
    else:
        return 0

def maxValue(scrImage):
    max = np.amax(scrImage)
    maxp = unravel_index(np.argmax(scrImage), np.shape(scrImage))
    return max, maxp[0], maxp[1]

def minValue(scrImage):
    min = np.amin(scrImage)
    minp = unravel_index(np.argmin(scrImage), np.shape(scrImage))
    return min, minp[0], minp[1]
    
def meanValue(scrImage):
    mean= np.mean(scrImage)
    return mean
    
def minMaxValue(scrImage):
    min = np.amin(scrImage)
    minp = unravel_index(np.argmin(scrImage), np.shape(scrImage))
    max = np.amax(scrImage)
    maxp = unravel_index(np.argmax(scrImage), np.shape(scrImage))
    return min, minp[0], minp[1], max, maxp[0], maxp[1]
in meinem Befehlsfenster tippe ich nun folgendes ein:
>> from PIL import Image
>> import numpy as np
>> import matplotlib.pyplot as plt
>> import DataObjectArithmetic as DOA
Dabei ist 'DataObjectArithmetic' der Name der Datei.
Um eine Funktion auszuführen mache ich
>> scrImage1 = np.array(Image.open("imageTif1.tif"))
>> scrImage2 = np.array(Image.open("imageTif2.tif"))
(Laden von zwei Bildern die ich vergleichen möchte)
>> DOA.areEqual(scrImage1, scrImage2)
nun soll das Ergebnis erstellt werden. Ich bekomme aber die Meldung: name 'np' is not defined.
Aber wieso? numpy habe ich doch schon importiert?
Wie muss ich das anders schreiben?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Du musst NumPy auch in deinem Modul importieren. Importe werden nicht magisch zwischen den Modulen weitergereicht.
Das Leben ist wie ein Tennisball.
GoldenerReiter
User
Beiträge: 17
Registriert: Montag 14. Juli 2014, 16:13

Tatsächlich.
Eigentlich hatte ich gedacht, dass ich das schon ausprobiert hatte und es trotzdem nicht funktioniert hat.
Nun funktioniert es aber. Besten Dank :D

Eine Nachfrage hätte ich noch. Wo muss ich die Datei hinspeichern, damit ich beim Importieren nicht im pfad sein muss? Also jetzt muss ich erst im Rile-Sysetm dahin gehen, sodass ich die Datei sehen kann. aber z.B. numpy kann ich immer importieren.

Grüße
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Dafür hast du im Prinzip zwei Möglichkeiten. Du kannst entweder die PYTHONPATH-Variable anpassen, so dass dein Modul im Suchpfad liegt, oder du fügst den Suchpfad dynamisch in ``os.path`` ein. Hat beides seine Vor- und Nachteile. Außerdem solltest du noch einen Blick auf das virtualenv-Modul werfen, das ist bei solchen Sachen ganz nützlich.
Das Leben ist wie ein Tennisball.
BlackJack

Es gäbe noch eine dritte Möglichkeit: Das Modul ordentlich installieren. Dann muss man aber unbedingt darauf achten dass der Name kein grosses ”Kollisionsrisiko” darstellt. Und eventuell würde es auch Sinn machen ein Package anzulegen und das Modul dort hinein zu stecken, falls man da mal mehr Module haben möchte.
Antworten