ich ein kleines Programm geschrieben habe, zu tun, die folgenden:Passing Variablen in und von Funktionen aus
- inspizieren ein Bild
- eine Reihe zufällig wählt aus dem Bild
- Plot der Pixelwert entlang dass Zeile
- eine
list
der lokalen Minima machen in dieser Reihe
und ich versuche, es in eine Funktion zu machen, damit ich tun Das gleiche gilt für 10 Zeilen, damit ich die Pixelwerte aller dieser Zeilen darstellen kann, ohne das Programm 10 Mal ausführen zu müssen.
Der Code sieht wie folgt aus:
from astropy.io import fits
import matplotlib.pyplot as plt
import numpy as np
hdulist = fits.open('xbulge-w1.fits') # Open FITS file as image
w1data = hdulist[0].data
height = w1data.shape[0] # Inspect height of image
width = w1data.shape[1]
def plot_envelope(image, image_height):
index = np.random.randint(0, height/2) # Select random number in upper half
row = w1data[index] # Look at row number
local_minima = []
# Find local minimum, and add to list of minimum-valued pixels
for i in range(1, width-1):
if w1data[index][i-1] > w1data[index][i]:
if w1data[index][i+1] > w1data[index][i]:
local_minima.append(w1data[index][i])
else:
continue
return (local_minima, row, index)
plot_envelope(w1data, height)
x1 = range(width)
plt.plot(x1, row, color = 'r', linewidth = 0.5)
plt.title('Local envelope for row ' + str(index))
plt.xlabel('Position')
plt.ylabel('Pixel value')
plt.show()
Es funktioniert gut, wenn ich (dh keine Funktionsdefinition verwenden, wenn die Erklärungen von index
, row
und local_minima
und die verschachtelten for
Schleifen sind im main
Teil das Programm). Bei der angegebenen Funktionsdefinition wird ein Fehler NameError: name 'local_minima' is not defined
zurückgegeben.
Da ich diese Variablen aus der Funktion übergebe, sollte ich nicht in der Lage sein, sie im Rest des Programms zu verwenden?
Fehle ich etwas über lokale und globale Variablen?
Woher bekommen Sie den 'NameError'? Ich sehe nicht, wie der gepostete Code einen 'NameError' für' local_minima' zurückgeben würde, es sei denn, es ist in einem anderen Teil des Codes, den Sie nicht angezeigt haben. – SethMMorton