我想為最多使用 numpy 包在字典中給出的所有可能的引陣列合(潛在的不同數量)評估一個函式。
args1 = {'a' : [1, 2, 3], 'b' : [6, 7]}
args2 = {'a' : [1, 2, 3], 'b' : [6, 7], 'c' : [5, 4}
def fun(a, b, c = 1):
return a b c
# What I want to automate:
fun(args1['a'][0], args1['b'][0])
fun(args1['a'][1], args1['b'][0])
.
.
.
fun(args2['a'][2], args2['b'][1], args2['c'][0])
fun(args2['a'][2], args2['b'][1], args2['c'][1])
有沒有一種優雅的方法來做到這一點?我正在考慮將 'args' 轉換為所有字典組合的串列(無法理解人們將如何做到這一點......也許使用字典理解?),然后使用 map()。或者也許 np.frompyfunc 可以作業,但我找不到轉換字典的方法......
uj5u.com熱心網友回復:
一種方法是使用itertools.product生成組合
from itertools import product
args1 = {'a': [1, 2, 3], 'b': [6, 7]}
args2 = {'a': [1, 2, 3], 'b': [6, 7], 'c': [5, 4]}
def fun(a, b, c=1):
return a b c
for pair in product(*args1.values()):
res = fun(**dict(zip(args1, pair)))
print(res)
輸出
8
9
9
10
10
11
或者作為替代,只要字典的鍵與引數的順序(插入)相同:
for pair in product(*args1.values()):
res = fun(*pair)
print(res)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/330884.html
