具有隐含层次结构的大型扁平字典的计算性能

2024-04-26 09:46:32 发布

您现在位置:Python中文网/ 问答频道 /正文

给定一本这样结构的词典:

{'guy1_arm_param1':23.0, 'guy1_arm_param2_low':2.0, 'guy1_arm_param2_high':3.0, 'guy1_arm_param3':20.0,
'guy1_leg_param1':40.0, 'guy1_leg_param2_low':2.0, 'guy1_leg_param2_high':3.0, 'guy1_leg_param3':20.0,
'guy2_arm_param1':23.0, 'guy2_arm_param2_low':2.0, 'guy2_arm_param2_high':3.0, 'guy2_arm_param3':20.0,
'guy2_leg_param1':40.0, 'guy2_leg_param2_low':2.0, 'guy2_leg_param2_high':3.0, 'guy2_leg_param3':20.0,
'another_guy_param1':3.0}

做一个函数最有效的方法是什么?它将遍历并提取给定“guy”的参数,然后用它们进行计算? 例如:

def full_guy_function(given_dict, guy):
    d = unflatten(given_dict)
    guy_functions = list()
    guy_dict = {}
    for body_part in d[guy].keys():
        param1 = d[guy][body_part]['param1']
        param3 = d[guy][body_part]['param3']
        for k, v in d[guy][body_part]['param2'].iteritems():
            guy_functions.append(get_function_for_part(param1, v, param3))  
    full_guy_function = sum(guy_functions)
    return full_guy_function

def get_function_for_part(param1, param2, param3):
    x = [x for x in range(0,100)]
    x = numpy.array(x)
    return param3**(x*param1/param2)

# http://stackoverflow.com/questions/6037503/python-unflatten-dict
def unflatten(dictionary):
    resultDict = dict()
    for key, value in dictionary.iteritems():
        parts = key.split('_')
        d = resultDict
        for part in parts[:-1]:
            if part not in d:
                d[part] = dict()
            d = d[part]
        d[parts[-1]] = value
    return resultDict

我觉得翻阅和制作其他字典等都是非常低效的。(这是一个很大的主字典,每隔几毫秒就会调用一次此函数。) 我尝试使用更容易理解的对象来实现这一点,但是层次对象不能从不同的进程读取,而不是从正在使用和写入它们的进程读取。所以,我一直在努力制作这样一个巨大的扁平字典,并计算过程两边的结果。你知道吗

如果这种类型的操作必须每隔几毫秒对大型数据集执行一次,那么使用数据库是否更好?你知道吗


Tags: inforfunctiondictarmlowparam1high