如何保存多参数长度计算结果?

2024-06-25 06:30:35 发布

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

我正在用多个参数做一些冗长的计算。我想保存和检索这些计算的结果。我知道如何用pickle保存numpy数组,但我不确定如何有效地编码用于计算这些数组的参数

作为一个例子,我有一个计算大型矩阵特征值的函数。根据用于构造矩阵的参数,我得到不同的特征值。现在我想保存用dim, parameterA, parameterB, parameterC的特定组合得到的特征值。我可以尝试对文件名中的参数进行编码,但这会很快导致文件名很长,因为我的实际代码中有更多的参数。有什么办法吗

import numpy                                                                                                   


def calculate_eigenvalues(dim, parameterA, parameterB, parameterC):                                            
    numpy.random.seed(parameterA)                                                                              
    matrix = numpy.random.uniform(parameterB, parameterC, (dim,dim))                                           
    eigenvalues = numpy.linalg.eigvals(matrix)                                                                 
    return eigenvalues                                                                                         


def magic_save(dim, parameterA, parameterB, parameterC):                                                       
    eigenvalues = calculate_eigenvalues(dim, parameterA, parameterB, parameterC)                               
    SAVE(eigenvalues)                                                                                          


def magic_load(dim, parameterA, parameterB, parameterC):                                                       
    LOAD(eigenvalues)                                                                                          
    return eigenvalues                                                                                         


# calculate and save eigenvalues                                                                               
magic_save(dim=4, parameterA=2, parameterB=-3.2, parameterC=4.1)  # calculates and saves eigenvalues           

# calculate and save some other eigenvalues for different parameters                                           
magic_save(dim=8, parameterA=23, parameterB=-3.1, parameterC=0.1)  # calculates and saves eigenvalues          

# retrieve eigenvalues for a certain combination of parameters                                                 
loaded_eigenvalues = magic_load(dim=4, parameterA=2, parameterB=-3.2, parameterC=4.1)    # loads saved eigenvalues
calculated_eigenvalues = calculate_eigenvalues(dim=4, parameterA=2, parameterB=-3.2, parameterC=4.1)           

# compare that the result is really the same:                                                                  
print(f"loaded and calculated eigenvalues are identical:"                                                          
      f"{numpy.allclose(loaded_eigenvalues, calculated_eigenvalues)}")

Tags: andnumpy参数savedefmagiccalculatedim
1条回答
网友
1楼 · 发布于 2024-06-25 06:30:35

IIUC,您可以从所有参数值(可能包括参数名)计算哈希值,并将其用作文件名。像这样,您可以非常确定为每个参数值组合获得唯一的文件名,同时保持文件名长度简洁一致

from hashlib import md5

def get_filename(*params):

    fn = md5('_'.join(map(str, params)).encode('utf-8')).hexdigest()[:10]
    return fn + '.pickle'

params = [1.2, 3, 4, 'abc']
get_filename(params)
# out: '4d2e889a15.pickle'

相关问题 更多 >