我有一个文件列表(有时只有一个),我想用滑动窗口并行处理每个文件中的每n行。 我不想通过文件使用多处理,因为在某些情况下,可用的文件可能少于内核。你知道吗
接下来,我要将每个滑动窗口的输出存储在一个列表中(对于随机值)。我已经做到了这一点,到目前为止,它的工作很好,但也有问题。你知道吗
如果我可以更改pool.map
并使用pool.something_else
来为我的函数提供多个参数(文件、滑动窗口大小和j),那就太好了。你知道吗
我试过用pool.apply_async
但是当我用pool.join
的时候,它花费了太长的时间,我猜是出了问题。下一步我想通过使用滑动窗口遍历所有文件来比较输出值(mean和std):all_segments
。你知道吗
简而言之:
对于文件中的每个滑动窗口,计算平均值,并根据之前获得的平均值和标准偏差计算z分数。你知道吗
def random_segments(j):
cov_list=[]
cov = []
lines = list(islice(f, j, j+1000))
for line in lines:
cov.append(float(line.split("\t")[2]))
mc1 = sum(cov)/len(cov)
cov_list.append(mc1)
return cov_list
def all_segments(j):
cov_list=[]
cov = []
lines = list(islice(f, j, j+1000))
for line in lines:
cov.append(float(line.split("\t")[2]))
mc2 = sum(cov)/len(cov)
z = (mc2 - mean) / sd
print (z)
if z > 10 or z < -10:
print (line)
if __name__ == '__main__':
for cv_file in os.listdir("."):
if cv_file.endswith(".coverage.out"):
f = open(cv_file, 'r').readlines()
if args.ws == False:
args.ws = 1000
size = len(f)
print (cv_file + "\t" + str(size))
perc= float(args.rn)/100 * int(size)
perc = perc // 1
print(perc)
pool=mp.Pool(int(args.proc))
rn=[random.randint(1,int(size)-args.ws) for _ in range(10)]
data = pool.map(random_segments, [i for i in rn])
data = [ent for sublist in data for ent in sublist]
sd, variance, mean = mean_std(data)
目前没有回答
相关问题 更多 >
编程相关推荐