关于从两个列表(最小值和最大值)中选择最佳选项的建议python
Suggestion on picking the best options of two lists (minimum and maximum )python
我有三个列表,每个列表有 200,000 个项目。标题为 'config' 的第一个列表是配置名称列表(这些是 window 盲配置)。第二个列表具有每个配置的照度性能(相同顺序,意味着 config_a001 产生 350 的照度值)。最后一个列表对每个配置都有一个值(同样的顺序,所以 config_002 的值为 0.24)
config = ['config_a001', 'config_a002', ......]
illuminnace = [350, 376, 260, 500, 450,......]
LUR_value = [0.3,0.24,.7,.1,.....]
我需要选择产生最高照度和最低 LUR 值的最佳 5 种配置。如果这不可能,我需要选择具有最低 LUR 值的最佳 5 个配置,但它们的照度应高于特定阈值,比如 450。
我知道像这样的事情应该使用遗传算法来解决,但我在这方面很有经验,如果有人能提供建议,我将不胜感激。
您可以考虑将数据组织成一个 pandas DataFrame:
import pandas as pd
config = ['config_a001', 'config_a002', 'config_a003', 'config_a004', 'config_a005', 'config_a006']
il = [350, 376, 310, 340, 290, 375]
lur = [0.3, 0.24, 0.21, 0.31, 0.24, 0.28]
创建列表字典
d = {'config': config, 'il': il, 'lur': lur}
从您的字典创建一个 DataFrame 对象
df = pd.DataFrame(d)
使用 sort_values()
并从 config
列切出前 5 个结果:
res = df.sort_values(['il', 'lur'], ascending=[False, True])[:5]['config'].values
这提供了一个带有配置值的 numpy 数组。
list(res)
# Result: ['config_a002', 'config_a006', 'config_a001', 'config_a004', 'config_a003']
给定:
config = ['config_a001', 'config_a002', 'config_a003', 'config_a004','config_a005']
illuminnace = [350, 376, 260, 500, 450]
LUR_value = [0.3,0.24,.7,.1,.3]
如果 'optimization' 最高 illuminnace
最低 LUR_value
您可以将列表压缩在一起以形成数据元组:
>>> list(zip(config,illuminnace,LUR_value))
[('config_a001', 350, 0.3), ('config_a002', 376, 0.24), ('config_a003', 260, 0.7), ('config_a004', 500, 0.1), ('config_a005', 450, 0.3)]
然后使用 key
函数对它们进行排序:
>>> sorted(zip(config,illuminnace,LUR_value),key=lambda t: (-t[1],t[2]))
[('config_a004', 500, 0.1), ('config_a005', 450, 0.3), ('config_a002', 376, 0.24), ('config_a001', 350, 0.3), ('config_a003', 260, 0.7)]
如果要过滤,请在 zip
之后但在 sorted
之前添加表达式以根据相关条件进行过滤:
>>> sorted((t for t in zip(config,illuminnace,LUR_value) if t[1]>=450),key=lambda t: (-t[1],t[2]))
[('config_a004', 500, 0.1), ('config_a005', 450, 0.3)]
如果您有更复杂的分组条件,请编写一个自定义的排序键函数来表达它,或者考虑使用 itertools.groupby。您当前的示例数据不够完整,无法举例。
我有三个列表,每个列表有 200,000 个项目。标题为 'config' 的第一个列表是配置名称列表(这些是 window 盲配置)。第二个列表具有每个配置的照度性能(相同顺序,意味着 config_a001 产生 350 的照度值)。最后一个列表对每个配置都有一个值(同样的顺序,所以 config_002 的值为 0.24)
config = ['config_a001', 'config_a002', ......]
illuminnace = [350, 376, 260, 500, 450,......]
LUR_value = [0.3,0.24,.7,.1,.....]
我需要选择产生最高照度和最低 LUR 值的最佳 5 种配置。如果这不可能,我需要选择具有最低 LUR 值的最佳 5 个配置,但它们的照度应高于特定阈值,比如 450。
我知道像这样的事情应该使用遗传算法来解决,但我在这方面很有经验,如果有人能提供建议,我将不胜感激。
您可以考虑将数据组织成一个 pandas DataFrame:
import pandas as pd
config = ['config_a001', 'config_a002', 'config_a003', 'config_a004', 'config_a005', 'config_a006']
il = [350, 376, 310, 340, 290, 375]
lur = [0.3, 0.24, 0.21, 0.31, 0.24, 0.28]
创建列表字典
d = {'config': config, 'il': il, 'lur': lur}
从您的字典创建一个 DataFrame 对象
df = pd.DataFrame(d)
使用 sort_values()
并从 config
列切出前 5 个结果:
res = df.sort_values(['il', 'lur'], ascending=[False, True])[:5]['config'].values
这提供了一个带有配置值的 numpy 数组。
list(res)
# Result: ['config_a002', 'config_a006', 'config_a001', 'config_a004', 'config_a003']
给定:
config = ['config_a001', 'config_a002', 'config_a003', 'config_a004','config_a005']
illuminnace = [350, 376, 260, 500, 450]
LUR_value = [0.3,0.24,.7,.1,.3]
如果 'optimization' 最高 illuminnace
最低 LUR_value
您可以将列表压缩在一起以形成数据元组:
>>> list(zip(config,illuminnace,LUR_value))
[('config_a001', 350, 0.3), ('config_a002', 376, 0.24), ('config_a003', 260, 0.7), ('config_a004', 500, 0.1), ('config_a005', 450, 0.3)]
然后使用 key
函数对它们进行排序:
>>> sorted(zip(config,illuminnace,LUR_value),key=lambda t: (-t[1],t[2]))
[('config_a004', 500, 0.1), ('config_a005', 450, 0.3), ('config_a002', 376, 0.24), ('config_a001', 350, 0.3), ('config_a003', 260, 0.7)]
如果要过滤,请在 zip
之后但在 sorted
之前添加表达式以根据相关条件进行过滤:
>>> sorted((t for t in zip(config,illuminnace,LUR_value) if t[1]>=450),key=lambda t: (-t[1],t[2]))
[('config_a004', 500, 0.1), ('config_a005', 450, 0.3)]
如果您有更复杂的分组条件,请编写一个自定义的排序键函数来表达它,或者考虑使用 itertools.groupby。您当前的示例数据不够完整,无法举例。