gpt4 book ai didi

python - 使用具有多个返回值和有序字典的多处理

转载 作者:行者123 更新时间:2023-12-01 04:03:14 25 4
gpt4 key购买 nike

我想使用多重处理来生成马尔可夫链的转移矩阵。

函数generateKeys()在进行转换后为状态空间中的每个状态生成一个具有新速率的字典和一个具有新键的字典。

from collections import OrderedDict

def generateKeys():
idxDict = OrderedDict()
rateDict = OrderedDict()
for key,state in stateDict.items():
newkeys,rates = transitionFunction(state)
idxDict[key] = newkeys
rateDict[key] = rates
return idxDict,rateDict

这里使用 OrderedDict 的原因是键在下一步中与常规 dict 混合在一起(在下一步中,我连接字典中的 numpy 数组)并将它们存储在稀疏的 coo_matrix 中)。

由于字典键是唯一的,因此应该可以并行运行 generateKeys() 并在多核计算机上更快地填充两个字典。

我已经研究了multiprocessing包和一些示例,但我看到的示例是针对单个返回值并且没有有序字典的。我还不太明白如何将其应用到我的环境中。谁能告诉我这是如何工作的?

最佳答案

如果 transitionFunction 可以按任意顺序应用您的状态:

transitionFunction('A')
transitionFunction('B')

# is equivalent to
transitionFunction('B')
transitionFunction('A')

您可以使用:

from multiprocessing import Pool, cpu_count

p = Pool(cpu_count())
results = p.map(transitionFunction, stateDict.values())

results 的顺序与 stateDict 的值相同,然后您可以使用以下命令构建您的字典:

idxDict = dict(zip(stateDict.keys(), i[0] for i in results))
rateDict = dict(zip(stateDict.keys(), i[1] for i in results))
<小时/>

如果 transitionFunction 不能以任何顺序应用您的状态,那么您将得到不可预测的结果...

关于python - 使用具有多个返回值和有序字典的多处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36133439/

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