2017-09-03 3 views
0

기능의 아웃 :합격 변수와 내가 다음 할 수있는 작은 프로그램을 작성했습니다

  • 이미지
  • 검사는
  • 플롯 픽셀 값에 따라 이미지에서 무작위로 행을 선택을 해당 행
  • 해당 행

에서 로컬 최소값의 list을하고 내가 그래서 나는 함수로 만들려고 해요 10 열을 말하기 위해 똑같은 방법으로 프로그램을 10 번 실행하지 않고도 모든 행의 픽셀 값을 플로팅 할 수 있습니다.
코드는 다음과 같습니다

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() 

내가 (함수 정의를 사용하지 않는 경우 그것은 잘 작동 즉 index, rowlocal_minima과 중첩 for 루프의 선언의 main 부분에있는 경우 프로그램). 표시된 함수 정의를 사용하면 NameError: name 'local_minima' is not defined 오류가 반환됩니다.
함수에서 해당 변수를 전달하고 있으므로 나머지 프로그램에서 사용할 수 없습니까?
로컬 변수와 글로벌 변수에 대한 정보가 누락 되었습니까?

+0

어디에서'NameError'를 얻을 수 있습니까? 나는 당신이 보여주지 않은 코드의 다른 부분에 있지 않는 한, 게시 된 코드가'local_minima'에 대한'NameError'를 반환하는 것을 보지 못합니다. – SethMMorton

답변

0

plot_envelope(w1data, height)을 호출하면 함수에 이미지 및 이미지에 w1data 및 height를 각각 지정하도록 지시하고 있습니다. 함수 내에서 w1dataimage 더미 변수 (함수 내부 이미지의 w1data 변경)로 조작해야합니다. 범위는 함수 내부에만 있습니다. 다음은 함수 (return)의 결과를 변수로 가져와야한다는 것입니다 : envelope = plot_envelope(w1data, height) Then local_minima = envelope[0], row = envelope[1], index = envelope[2].

+1

대체 호출은'local_minima, row, index = plot_envelope (w1data, height)'. – SethMMorton

+0

예! 참으로 더 나은 @SethMMorton; – Tico