我正在使用python模擬運行實驗,並且需要創建一個輸入案例列表。在Python中使用默認值進行多列表迭代
每種情況下從參數列表的列表採取一個實例,例如:
heights = [100,110,120]
alphas = [0.1,0.01,0.001]
C = [0.1,0.2,0.5,0.9]
B = [1,2]
和列表的列表是:
params = [heights,alphas,C,B]
原始量較大(〜30× ),所以直接處理每個列表效率不高。
最終,每個輸入的情況下是從每個類別一個參數的元組/ namedtuple /字典,例如:
instance = {'height':100, 'alpha':0.1,'C:0.1, 'B':1}
我想迭代以創建實例的列表的參數空間 - 但這裏是漁獲:
,而不是使所有的人,每次我想要遍歷所有選項每個參數的笛卡爾積,而類的其餘部分設置爲默認值(第一批) 。例如:
params = [[1,2,3],[4,5][7,8]]
預期實例集合(無重複)是:
[(1,4,7-),(2,4,7),(3,4, 7),(1,5,7)(1,4,8)]
其中是第一索引的默認值,是第二索引的和缺省被第三個的默認值。
製作一個笛卡爾乘積是很容易與itertools
:
from itertools import product
params = [[1,2,3],[4,5],[7,8]]
list(product(*params))
[(1,4,7),(1,4,8),(1,5,7),(1 (2,5,8),(2,4,7),(2,4,7),(2,4,8),(2,5,7),(2,5,8),(3,4,7),(3,4 ,8),(3,5,7),(3,5,8)]
然後我可以篩選出不必要的情況,但它聽起來不夠生成他們在第一個地方。有什麼優雅的方式來構建這個迭代?
是不是仍然首先創建的所有實例,然後過濾他們出去? – Dimgold
我看着你寫的最後一個盒子,認爲這是你想要的輸出,哦,哈哈。 – Rosh