使用 python 连接多处理函数的输出



我有 64 列的数据集,我想要的是每列找到 30 个特征。我有 12 个处理器系统,我想在这些处理器之间拆分列。 例如,处理器 1 查找 1-8 列的特征,处理器 2 查找 8-16 列的特征,依此类推。最后,我想要的是连接每个子过程的输出。

def process(i,subject):
X=fe.fit_transform(subject[:,i:i+8])

if __name__ == '__main__':
subject=np.load('data.npy')
process_list=[]
for i,j in enumerate(range(0,56,8)):   
process_list.append(Process(target = process,args = (i,subject)))
process_list[i].start()
process_list[i].join()

想要的是连接函数进程的输出 X。以简单的方式,我们可以将 X 附加到列表中,然后将其连接起来。但是我很困惑如何做到这一点。是否需要在函数内部或下方附加if __name__ == '__main__':

其他方式

我正在尝试的另一种方法是使用游泳池。这是方法

def cal_feature(subject):
return fe.fit_transform(subject)
if __name__ == '__main__':
subject=np.load('data.npy')
p=Pool()
result=p.map(cal_feature,subject)
p.close()
p.join()

在这个掌声中,我无法理解。 必应跨进程共享了哪些内容。对处理器执行功能拆分,或对处理器执行列拆分。通过功能拆分,我的意思是处理器-1 在所有 64 列中获取 5 个 30 个功能,处理器-2 为第 64 列获取下一个 5 个功能。或者处理器 1
为所有功能占用 1-8 列,处理器 2 接下来的 8 列。
第二种方法是给我这个错误 索引错误
:数组的索引太多。

编辑

import numpy as np
data= np.random.randint(0, 100, size=(30, 10, 20))
def cal_feature(subject):
return np.mean((subject),-1)    
result=cal_feature(data)    
print(result)

这是我工作的简化版本。除了平均特征外,还有其他特征,这些特征由其他函数计算。
谈到上面的简化示例,轴 0 显示试验,轴 1 显示列,轴 2 显示数据点。cal_feature计算每个试验的平均值。这样我们得到的结果具有(30,10)形状 .假设我有 2 个处理器,
我想要的是计算前 5 列的平均值和一个处理器的所有 30 次试验,结果形状为30,5. 和处理器 2 接下来 5 列的计算平均值,结果为30,5的形状。将它们合并并获得30,10形状的最终结果

你可以试试:

p = Pool(20) # your max workers = 2 * num cpu cores 
result = p.map(cal_feature, np.split(subject,20))

相关内容

  • 没有找到相关文章

最新更新