gpt4 book ai didi

python - python 多处理中的多个可迭代对象作为参数

转载 作者:行者123 更新时间:2023-12-01 00:36:25 26 4
gpt4 key购买 nike

我有 3 维数据集 (100,64,3000),并且我正在使用多处理查找功能。我正在跨 channel 进行多处理。例如每个进程覆盖 64 个 channel 中的 8 个。这是我的代码

import numpy as np
import time
from multiprocessing import Process,current_process,Pool

sub=1
def cal_feature(ch):
data=np.load('data_{}.npy'.format(sub))
return np.mean(data[:,ch:ch+8,:],-1)


# multiprocessing
if __name__ == '__main__':

start = time.time()
ch=[i for i in range(0,64,8)]
with Pool(8) as p:
result = p.map(cal_feature,(ch) )
print(time.time()-start)

您可以通过这种方式创建虚拟数据。

import numpy as np
np.save('data_1', np.random.randint(0, 100, size=(100, 64, 3000)))
np.save('data_2', np.random.randint(0, 100, size=(100, 64, 3000)))
np.save('data_3', np.random.randint(0, 100, size=(100, 64, 3000)))
np.save('data_4', np.random.randint(0, 100, size=(100, 64, 3000)))

在我的代码中,我必须定义必须手动选取哪些数据sub=1。我想修改上面的代码,使其选择 sub =1 ,然后以多进程方式查找所有 channel 的功能。完成后,它会转到主题 2,依此类推。

编辑

ind_result=[result[i:i+8] for i in range(0,(len(sub)*8),8)]
for i,j in zip(sub,ind_result):
np.save('subject_0_{}'.format(i),np.concatenate((j),1) )

最佳答案

您面临多处理的一个常见限制,即pool.map仅接受一个可迭代参数。

您可以通过将 chsub 打包到一个元组中来解决这个问题,并使用 itertools.product 构建可迭代的参数(reference here) 。然后,您可以在 cal_feature 函数中解压这两个参数。

import numpy as np
import time
from multiprocessing import Pool
from itertools import product

def cal_feature(param):
sub, ch = param
data=np.load('data_{}.npy'.format(sub))
return np.mean(data[:,ch:ch+8,:],-1)


# multiprocessing
if __name__ == '__main__':

start = time.time()
ch=[i for i in range(0,64,8)]
sub = [1, 2, 3, 4]

# here's the magic
param_list = product(sub, ch)
print list(param_list)
# [(1, 0), (1, 8), (1, 16), (1, 24), (1, 32), (1, 40), (1, 48),
# (1, 56), (2, 0), (2, 8), (2, 16), (2, 24), (2, 32), (2, 40),
# (2, 48), (2, 56), (3, 0), (3, 8), (3, 16), (3, 24), (3, 32),
# (3, 40), (3, 48), (3, 56), (4, 0), (4, 8), (4, 16), (4, 24),
# (4, 32), (4, 40), (4, 48), (4, 56)]

p = Pool(8)
result = p.map(cal_feature,param_list )
p.close()
print(time.time()-start)
# 0.0117809772491

关于python - python 多处理中的多个可迭代对象作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57722822/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com