-3

所以我有一个函数可以遍历目录中的文件,从每个文件中提取指定的数组,然后将它们堆叠在一个大数组中。

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”。)

4

2 回答 2

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)
于 2013-02-03T23:25:26.227 回答
0

还有其他人已经指出,您必须return读取您读入的数组,以便以后使用它。一些额外的评论:

  • 如果例程只读取数据会更优雅,并且您可以在例程返回数据后绘制它。

  • 不要在循环中使用 hstack,因为它会创建副本。要么使用 numpy 中的fromfileorgenfromtxt例程,要么至少在循环中创建一个列表,并在循环完成后将其转换为数组。如果你以类似的方式获得它,这同样适用于 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)
    
于 2013-02-04T07:16:56.093 回答