功能不保留数组中的值

时间:2013-02-03 23:22:52

标签: python arrays loops numpy filelist

所以我有一个循环遍历目录中文件的函数,从每个文件中拉出指定的数组,并将它们堆叠在一个大的数组中。

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

2 个答案:

答案 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中的fromfilegenfromtxt例程,要么至少在循环中创建一个列表,并在循环结束后将其转换为数组。如果您以类似的方式获得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)