是否有方法指定QuTiP的parallel_map应该迭代哪个参数?

问题描述 投票:0回答:2

QuTiP的函数parallel_map为并行计算其参数的多个值提供了计算给定函数的值的可能性。所有parallel_map都显示第一个位置参数发生变化的情况,如下所示:

examples

此返回def testFunc1(a, b): return a, b from qutip import parallel_map parallel_map(testFunc1, (1, 2, 3), task_args=(4,)) 。现在,我想知道是否还可以为[(1, 4), (2, 4), (3, 4)]设置一个固定值,为a提供一个元组。根据b documentation也可以是字典,所以我试过

task_args

但是这会导致parallel_map(testFunc1, (1, 2, 3), task_args={'a': 4}) parallel_map(testFunc1, (1, 2, 3), task_args={'a': 4, 'b': (1, 2, 3)}) 。当我尝试

TypeError: can only concatenate tuple (not "dict") to tuple

我得到parallel_map(testFunc1, b=(1, 2, 3), task_args={'a': 4})

有人知道如何将TypeError: parallel_map() missing 1 required positional argument: 'values'用于第[[n个位置参数(无需为每个n编写函数包装器吗?)?

python parallel-processing parameter-passing qutip
2个回答
0
投票

Q:“如何为第parallel_map个位置参数使用[parallel_map (不为每个n写函数包装器?”

[避免产生问题,在不出现问题的情况下,将您在n中调用的函数调用签名中第n个外部填充的可迭代对象,直接放入def预期的(如文档所述)并进行迭代-处理兼容

parallel_map()

tuple

“是什么意思,例如# ( )-------------------------- parallel_map() expected TUPLE #your Fun( ( a vv--)-------------------)----------------your FED-IN ITERABLE testFunc1( ( 'a', 'b1' ), 'of-no-interest' ) --> (('a', 'b1'), 'of-no-interest') testFunc1( ( 'a', 'b2' ), 'of-no-interest' ) --> (('a', 'b2'), 'of-no-interest') testFunc1( ( 'a', 'b3' ), 'of-no-interest' ) --> (('a', 'b2'), 'of-no-interest') ?在这里parallel_map(testFunc1, [(4, 1), (4, 2), (4, 3)], task_args=('of-no-interest',))始终具有值b。–'of-no-interest'A. P.

否,该示例是通向

unload 2 hours ago

和任何及所有n-th用户端代码FED​​-IN iterables ),就如上面所要求的那样。a
显示方式,请致电:

def testFun2( a, b ): return [ item for item in tuple( a ) ], b

交付->

testFun2( ( 'a', 'b', "c", None, 42, -3.14159, "The-N-th-ITERABLE" ), 'not-important-one-(of-no-interest-HERE-in-solving-N-th-iterable-for-parallel_star()-calls)...' )

正好都遇到

a]]您希望有任何第N个可迭代的徒手,不仅是第一个位置,而且还有[[b] (['a', 'b', 'c', None, 42, -3.14159, "The-N-th-ITERABLE"], 'not-important-one-(of-no-interest-HERE-in-solving-N-th-iterable-for-parallel_star()-calls)...') 的呼叫签名所期望的,并据此记录::>parallel_map()
查看parallel_map()揭示了为什么它仅适用于函数的第一个参数:
parallel_map( testFun2, # TASK Callable ( <_USER-SIDE_GENERATOR_FEED-IN_TUPLEsOfPARs_> ),# TASK VALUE(s)Array / List any_other_wished2have_call-signature_parameters, # TASK_ARGS Dict ..., # TASK_KWARGS Dict ... # call KWARGS Dict )

在这一行中,将创建并行进程。函数source code of parallel_map获取表示所有位置参数的元组,该元组是从parallel_map的1个元素和所有其他async_res = [pool.apply_async(task, (value,) + task_args, task_kwargs, _update_progress_bar) for value in values] 的元素创建的。由于task的元素位于组合元组(values)的第一个位置,因此它是函数的[[总是第一个自变量

,该函数在其并行实例之间有所不同。如果task_args使用了字典,则values来自以下事实:(value,) + task_args运算符仅对TypeError: can only concatenate tuple (not "dict") to tuple而不是task_args重载。
因此,最终没有办法构建包装器。每个特定

n

之一,或通用的类似:]]+

与此通话

(tuple, tuple)
返回

(tuple, dict)


0
投票
© www.soinside.com 2019 - 2024. All rights reserved.