相关疑难解决方法(0)

连接Numpy数组而不复制

在Numpy中,我可以使用np.appendor 连接两个端到端的数组np.concatenate:

>>> X = np.array([[1,2,3]])
>>> Y = np.array([[-1,-2,-3],[4,5,6]])
>>> Z = np.append(X, Y, axis=0)
>>> Z
array([[ 1,  2,  3],
       [-1, -2, -3],
       [ 4,  5,  6]])
Run Code Online (Sandbox Code Playgroud)

但是这些会复制他们的输入数组:

>>> Z[0,:] = 0
>>> Z
array([[ 0,  0,  0],
       [-1, -2, -3],
       [ 4,  5,  6]])
>>> X
array([[1, 2, 3]])
Run Code Online (Sandbox Code Playgroud)

有没有办法将两个数组连接到视图中,即没有复制?那需要一个np.ndarray子类吗?

python numpy multidimensional-array

68
推荐指数
2
解决办法
3万
查看次数

如何使用Pool.map()进行多处理时解决内存问题?

我已将程序(如下)写入:

  • 读取一个巨大的文本文件 pandas dataframe
  • 然后groupby使用特定列值拆分数据并存储为数据帧列表.
  • 然后管道数据以multiprocess Pool.map()并行处理每个数据帧.

一切都很好,该程序在我的小测试数据集上运行良好.但是,当我输入大数据(大约14 GB)时,内存消耗呈指数级增长,然后冻结计算机或被杀死(在HPC群集中).

一旦数据/变量无效,我就添加了代码来清除内存.一旦完成,我也正在关闭游泳池.仍然有14 GB的输入我只期望2*14 GB的内存负担,但似乎很多正在进行.我也尝试使用调整,chunkSize and maxTaskPerChild, etc但我没有看到测试与大文件的优化有任何区别.

我认为,当我开始时,在此代码位置需要对此代码进行改进multiprocessing.

p = Pool(3) # number of pool to run at once; default at 1 result = p.map(matrix_to_vcf, list(gen_matrix_df_list.values())) 但是,我发布了整个代码.

测试示例:我创建了一个高达250 mb的测试文件("genome_matrix_final-chr1234-1mb.txt")并运行该程序.当我检查系统监视器时,我可以看到内存消耗增加了大约6 GB.我不太清楚为什么250 mb文件加上一些输出需要这么大的内存空间.如果它有助于查看真正的问题,我通过下拉框共享该文件.https://www.dropbox.com/sh/coihujii38t5prd/AABDXv8ACGIYczeMtzKBo0eea?dl=0

有人可以建议,我怎么能摆脱这个问题?

我的python脚本:

#!/home/bin/python3

import pandas as pd
import collections
from multiprocessing import Pool
import io
import time
import resource

print()
print('Checking required modules')
print()


''' change this input file name and/or …
Run Code Online (Sandbox Code Playgroud)

python memory multiprocessing pandas python-multiprocessing

19
推荐指数
3
解决办法
5656
查看次数

没有复制的熊猫数据框

在创建 Pandas DataFrame 时,如何避免复制提供的字典?

>>> a = np.arange(10)
>>> b = np.arange(10.0)
>>> df1 = pd.DataFrame(a)
>>> a[0] = 100
>>> df1
     0
0  100
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9
>>> d = {'a':a, 'b':b}
>>> df2 = pd.DataFrame(d)
>>> a[1] = 200
>>> d
{'a': array([100, 200,   2,   3,   4,   5,   6,   7,   8,   9]), 'b': array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8., …
Run Code Online (Sandbox Code Playgroud)

pandas

5
推荐指数
2
解决办法
2352
查看次数