gpt4 book ai didi

python - 如何保存多参数的冗长计算结果?

转载 作者:行者123 更新时间:2023-12-01 06:45:08 25 4
gpt4 key购买 nike

我正在使用多个参数进行一些冗长的计算。我想保存并检索这些计算的结果。我知道如何用 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)}")

最佳答案

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'

关于python - 如何保存多参数的冗长计算结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59261909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com