内存问题造成巨大的numpy(被信号9中断:SIGKILL)

时间:2017-10-13 07:12:40

标签: arrays numpy sigkill

我有一个巨大的csv,我必须为某个列中的相同参数创建一个numpy数组(类型ara大约10)但我的列表有问题:它太大而python下降了:

 def mem():
    file = pd.read_csv(file_csv)
    x = []
    y = []
    path_prec = 0
    for index, row in file.iterrows():
        if path_prec == 0:
            path_prec = row[0]
        if path_prec!= row[0]:
            X = np.stack(x, axis=0)  
            Y = np.stack(y, axis=0)
            #save X and Y
            x = []
            y = []
            path_prec = row[0]
        #do some stuff and create a list
        top = int(row[2]) 
        bottom = int(row[3])
        left = int(row[4])
        right = int(row[5])

        patch = image[top:bottom, left:right]

        patch_gt = gt[top:bottom, left:right]
        x.append(patch)
        y.append(patch_gt)
我能管理如此庞大的数据吗?用发电机?如何?

编辑: 这个巨大的csv包含在fyle系统中查找数据的信息

2 个答案:

答案 0 :(得分:1)

您可以创建NumPy的memmap对象。

根据其文件,这将:

  

为存储在磁盘上的二进制文件中的数组创建内存映射。

     

内存映射文件用于访问磁盘上的大段文件,而无需将整个文件读入内存。

您可能希望手动解析CSV以迭代填充memmap,例如使用chuncksize选项。有关如何将chunksize用于类似用途的代码,请参阅参考资料:loading csv column into numpy memmap (fast)

答案 1 :(得分:0)

快速天真的解决方案:每条路径都有多个numpy数组(因为我必须做的事情并不重要所以解决方案是最简单的