我想從實驗的全因子設計中創建可能組合的 DF。我正在使用 doepy,但隨著我的 DOE 中組合數量的增加,它似乎正在放緩。我改用笛卡爾積,product_dict()它似乎更快,但以不同的順序給出組合。
我需要 DOE 組合的資料框與 doepy 給出的順序相同,我認為這是可能的,但我不確定如何。
我的問題是如何計算笛卡爾積gas_dict并以與 doepy 相同的順序給出結果?
import pandas as pd
from doepy import build
from tqdm.contrib.itertools import product
gas_dict = {
'Velocity (m/s)': [0.00000000E 00, 0.10000000E 00, 0.20000000E 00, 0.30000000E 00,
0.40000000E 00, 0.60000000E 00, 0.10000000E 01],
'Pressure (Pa)': [0.10000000E 06, 0.50000000E 06, 0.10000000E 07, 0.20000000E 07,
0.40000000E 07],
'Temperature': [0.30000000E 03, 0.40000000E 03, 0.50000000E 03, 0.60000000E 03,],
'Equivalence Ratio': [0.10000000E 00, 0.50000000E 00, 0.60000000E 00, 0.70000000E 00,
0.80000000E 00, 0.90000000E 00, 0.10000000E 01, 0.11000000E 01,
0.12000000E 01, 0.13000000E 01] }
def product_dict(**kwargs):
keys = kwargs.keys()
vals = kwargs.values()
for instance in product(*vals):
yield dict(zip(keys, instance))
gas = build.full_fact(gas_dict) #Correct form
gas_product = list(product_dict(**gas_dict)) #Incorrect
gas_product = pd.DataFrame(gas_product)
gas_.equals(gas_product)
compare = gas == gas_product
uj5u.com熱心網友回復:
我認為這歸結為 product 函式的引數順序,這似乎決定了在創建笛卡爾積時陣列回圈的方式。如果您顛倒輸入字典中陣列的順序,則輸出將變得相同。(這似乎只是這里兩個實作之間的差異,所以如果有人有一些更詳細的見解會很好。)
# reverse dictionary keys
reversed_cols = list(gas_dict.keys())[::-1]
# create reversed input dictionary
gas_dict_rev = {c: sorted(gas_dict[c]) for c in reversed_cols}
# create cartesian product with reversed column order
gas_product_rev = list(product_dict(**gas_dict_rev))
gas_product_rev = pd.DataFrame(gas_product_rev)
# change the column order to conform original dict
gas_product_rev = gas_product_rev[gas_dict.keys()]
然后輸出在視覺上看起來相同,但gas.equals(gas_product_rev)仍然FALSE為我報告。我不熟悉這個函式,但我猜它沒有考慮浮點精度。使用允許浮點精度的 numpy 函式進行檢查,我們得到預期的結果:
for column in gas:
print(f'{column} {np.allclose(gas[column], gas_product[column])}')
# Velocity (m/s) False
# Pressure (Pa) False
# Temperature False
# Equivalence Ratio False
for column in gas:
print(f'{column} {np.allclose(gas[column], gas_product_rev[column])}')
# Velocity (m/s) True
# Pressure (Pa) True
# Temperature True
# Equivalence Ratio True
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/487715.html
