高维参数处理
需求
高维参数化的分析,比如模拟一个体系,体系的长宽比在变,热源宽度在变,特征尺寸也在变。利用pandas和itertools可以对这类问题进行快速整洁的数据处理。
一个小例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 from itertools import productimport pandas as pdparameters = [ [0.01 , 0.005 ], [1 , 2 ], [1e-9 , 1e-8 ] ] meshgrid_parameters = list (product(*parameters)) parameter_names = ['wg' , 'w' , 'l' ] data = pd.DataFrame(columns=[parameter_names], data=meshgrid_parameters) def func (wg, w, l ): return wg * w * l for i, (wg, w, l) in enumerate (meshgrid_parameters): data.loc[i, 'product' ] = func(wg, w, l) print (data.to_markdown())
0
0.01
1
1e-09
1e-11
1
0.01
1
1e-08
1e-10
2
0.01
2
1e-09
2e-11
3
0.01
2
1e-08
2e-10
4
0.005
1
1e-09
5e-12
5
0.005
1
1e-08
5e-11
6
0.005
2
1e-09
1e-11
7
0.005
2
1e-08
1e-10
这里parameters就是要参数化分析的参数列表,parameter_names是这些参数对应的名字;itertools.product
将它们两两组合,返回一个生成器;func
是一个说明性的函数,假如要用这些参数计算某些物理量,可以用这样的方式来生成新的特征列。想要选取某个参数为特定值的各量的值,利用pandas提供的布尔索引即可:
1 data.loc[(data['wg']==0.01).values]
0
0.01
1
1e-09
1e-11
1
0.01
1
1e-08
1e-10
2
0.01
2
1e-09
2e-11
3
0.01
2
1e-08
2e-10