我得到了一个列表列表s:
s = [["a1", "A"], ["b4", "B"], ["a3", "A"], ["d6", "D"], ["c4", "C"]]
Run Code Online (Sandbox Code Playgroud)
(请注意,列表中的元素不一定以相同的字母开头。为了方便起见,我在这里修改了数据。)
我的目标是将每个列表按其第二个元素排序到一个类别,并通过在每个类别中最多选择一个元素来获得所有可能的组合。
我首先将列表列表散列到字典中:
dic = {i[1]: [] for i in s}
for i in s:
# set the value of the first item key to the second item
dic[i[1]].append(i[0])
dic
>>> {'A': ['a1', 'a3'], 'B': ['b4'], 'C': ['c4'], 'D': ['d6']}
Run Code Online (Sandbox Code Playgroud)
所有可能组合的数量,即幂集的长度s,应该返回23:
{'a1'},
{'a3'},
{'b4'},
{'c4'},
{'d6'},
{'a1', 'b4'},
{'a1', 'c4'},
{'a1', 'd6'},
{'a3', 'b4'},
{'a3', 'c4'},
{'a3', 'd6'},
{'b4', 'c4'},
{'b4', …Run Code Online (Sandbox Code Playgroud) 我制作了一个概率 DataFrame df,按以下顺序排序value:
value prob
0 -31 0.002597
1 -23 0.005195
2 -22 0.005195
3 -21 0.002597
4 -20 0.002597
5 -18 0.005195
6 -15 0.002597
...
39 19 0.007792
40 21 0.002597
41 22 0.005195
42 23 0.002597
43 25 0.002597
44 28 0.002597
45 29 0.005195
46 37 0.002597
Run Code Online (Sandbox Code Playgroud)
(如您所见, 的值value并未涵盖df[0]和之间的所有整数df[46])
我通过简单地执行以下命令绘制了概率分布图:
import matplotlib as plt
plt.plot(df['value'], df['prob'])
Run Code Online (Sandbox Code Playgroud)
它返回的
现在,我想平滑概率曲线,所以我尝试了两种方法。首先,我尝试过np.polyfit:
import numpy as np
x = df['value'] …Run Code Online (Sandbox Code Playgroud)