所以我有一个循环遍历目录中文件的函数,从每个文件中拉出指定的数组,并将它们堆叠在一个大的数组中。
def Graph(files,directory):
pattern = "{}.fits".format(files)
x = array([])
for filename in fnmatch.filter(os.listdir(directory),pattern):
data = pyfits.getdata(filename)
x1 = data.field('table')
x = hstack((x,x1))
plot(x,y) #where y would also be defined as data retrieved in the loop
当函数离开循环时,它会完全清除大数组(x)。为什么会发生这种情况的任何线索?
我需要从文件列表中获取数据并将所有数据合并到一个数组中,并绘制该数据。 (我将绘制它与另一个将以相同方式创建的数组“y”。)
答案 0 :(得分:2)
当然,您在函数中创建了x
,当函数退出时,它会超出范围并自动清理。
在函数末尾返回它并存储结果:
def Graph(files,directory):
pattern = "{}.fits".format(files)
x = array([])
for filename in fnmatch.filter(os.listdir(directory),pattern):
data = pyfits.getdata(filename)
x1 = data.field('table')
x = hstack((x,x1))
plot(x,y) #where y would also be defined as data retrieved in the loop
return x
x = Graph(files, directory)
答案 1 :(得分:0)
其他人已经指出,你必须return
你读入的数组,以便以后使用它。一些额外的评论:
如果例程只读取数据会更优雅,你会在例程返回后绘制它。
不要在循环中使用hstack,因为它会创建副本。要么使用numpy中的fromfile
或genfromtxt
例程,要么至少在循环中创建一个列表,并在循环结束后将其转换为数组。如果您以类似的方式获得y,则对y有效:
def readfiles(files, directory):
"Returns x and y values read from files in a given directory."
pattern = "{}.fits".format(files)
tmpx = []
tmpy = []
for filename in fnmatch.filter(os.listdir(directory),pattern):
data = pyfits.getdata(filename)
tmpx.append(data.field('table'))
tmpy.append(...) # Retrieve your y data
x = hstack(tmpx)
y = hstack(tmpy)
return x, y
# Main program
x, y = readfiles("test", "testdir")
plot(x, y)