在 Python 3.X 中将列表输入作为单个参数传递给 starmap
Passing list input as a single argument to starmap in Python 3.X
我是 python 的新手,所以如果这里有一些愚蠢的问题,我提前道歉。
我正在尝试并行化代码,为了保持半模块化,我需要将几个标量值和一个列表从一个函数传递到 Pool 中的另一个函数,如下所示:
with Pool(nProcs) as p:
out1= np.array(p.starmap(function1, product(arg1, arg2, ... argN)), dtype=object)
T_in = [out1[0,3]]
P_in = [out1[0,5]]
XALL = [out1[0,6]]
out2 = np.array(p.starmap(function2, product(P_in, T_in, ..., XALL)), dtype=object)
问题在于 out2 行的输入。基本上我传递的是单个值和列表的组合。这些列表中的大多数都通过 product 传递,以便我可以对它们进行迭代,但我需要从 function1 输出到 function2 中获取一个列表,而不需要 product 迭代每个值(即将 XALL 作为 "block" 传递)。显然,我在上面列出的方式将 XALL 视为任何其他列表,但如果我像这样从产品中弹出 XALL:
result = np.array(p.starmap(psr, [product(Ppsr_in, T_rise_list, Eff_list, T_tol, Tpsr_in), XALL]), dtype=object)
这也行不通,因为 starmap 抱怨我没有给 function2 足够的参数。
如何将此数组传递给 function2 并将其视为给定进程中的单个可迭代对象?
谢谢
编辑:
澄清一下,P_in 和 T_in 是标量值(它们也可以是一个列表,在此代码的早期版本中它们是),但是 XALL 是一个包含我需要传递给函数但不想遍历各个值的一系列值。这些值需要被视为单个数组,因为数组中的每个值代表单个化学物质的摩尔分数(在整个代码的上下文中)。如果我将它作为 XALL
产品传递,它将像对待任何其他列表一样对待它,并将每个值视为不同的情况,即 运行。我只需要此信息即可从一个功能转移到另一个功能。
听起来你只是想要这个:
with Pool(nProcs) as p:
out1= np.array(p.starmap(function1, product(arg1, arg2, ... argN)), dtype=object)
T_in = [out1[0,3]]
P_in = [out1[0,5]]
XALL = [out1[0,6]]
def function2_with_XALL(p, t, ...):
function2(p, t, ..., XALL)
out2 = np.array(p.starmap(function2_with_XALL, product(P_in, T_in, ...)), dtype=object)
如果不是这样,那么我坚持要你通过写下 for 循环来解释你想要它做什么。
我是 python 的新手,所以如果这里有一些愚蠢的问题,我提前道歉。
我正在尝试并行化代码,为了保持半模块化,我需要将几个标量值和一个列表从一个函数传递到 Pool 中的另一个函数,如下所示:
with Pool(nProcs) as p:
out1= np.array(p.starmap(function1, product(arg1, arg2, ... argN)), dtype=object)
T_in = [out1[0,3]]
P_in = [out1[0,5]]
XALL = [out1[0,6]]
out2 = np.array(p.starmap(function2, product(P_in, T_in, ..., XALL)), dtype=object)
问题在于 out2 行的输入。基本上我传递的是单个值和列表的组合。这些列表中的大多数都通过 product 传递,以便我可以对它们进行迭代,但我需要从 function1 输出到 function2 中获取一个列表,而不需要 product 迭代每个值(即将 XALL 作为 "block" 传递)。显然,我在上面列出的方式将 XALL 视为任何其他列表,但如果我像这样从产品中弹出 XALL:
result = np.array(p.starmap(psr, [product(Ppsr_in, T_rise_list, Eff_list, T_tol, Tpsr_in), XALL]), dtype=object)
这也行不通,因为 starmap 抱怨我没有给 function2 足够的参数。
如何将此数组传递给 function2 并将其视为给定进程中的单个可迭代对象?
谢谢
编辑:
澄清一下,P_in 和 T_in 是标量值(它们也可以是一个列表,在此代码的早期版本中它们是),但是 XALL 是一个包含我需要传递给函数但不想遍历各个值的一系列值。这些值需要被视为单个数组,因为数组中的每个值代表单个化学物质的摩尔分数(在整个代码的上下文中)。如果我将它作为 XALL
产品传递,它将像对待任何其他列表一样对待它,并将每个值视为不同的情况,即 运行。我只需要此信息即可从一个功能转移到另一个功能。
听起来你只是想要这个:
with Pool(nProcs) as p:
out1= np.array(p.starmap(function1, product(arg1, arg2, ... argN)), dtype=object)
T_in = [out1[0,3]]
P_in = [out1[0,5]]
XALL = [out1[0,6]]
def function2_with_XALL(p, t, ...):
function2(p, t, ..., XALL)
out2 = np.array(p.starmap(function2_with_XALL, product(P_in, T_in, ...)), dtype=object)
如果不是这样,那么我坚持要你通过写下 for 循环来解释你想要它做什么。