gpt4 book ai didi

matlab - 避免使用相同的参数重复调用模拟/函数

转载 作者:行者123 更新时间:2023-12-01 16:28:14 26 4
gpt4 key购买 nike

这是一道通用算法题,但我的主要环境是Matlab。

我有一个函数

out=f(arg1,arg2,,.....)

这需要很长时间来执行并且计算成本很高(即集群时间)。给定的参数 argn 可以是字符串、整数、向量,甚至是函数句柄

因此,我想避免为相同的参数值调用 f(args)。在我的程序中,这种情况可能会以程序员不一定控制的方式发生。

因此,我想对 args 的每个可能值调用一次 f(),并将结果保存到磁盘。然后,每当下次调用它时,检查当前是否有这些参数值的结果。如果是这样,我会从磁盘加载它。

我当前的想法是创建一个单元格变量,每个函数调用一行。第一栏就出来了。第 2:N 列是 argn 的值,并分别检查每个值的等价性。

由于参数的变量类型不同,我该如何做呢?

有更好的算法吗?

更一般地说,人们如何处理将模拟结果保存到磁盘并存储元数据? (除了将所有内容都塞进文件名中!)

最佳答案

您可以实现如下所示的函数:

function result = myfun(input)

persistent cache

if isempty(cache)
cachedInputs = [];
cachedOutputs = [];
cache = {cachedInputs, cachedOutputs};
end

[isCached, idx] = ismember(input, cache{1});

if isCached
result = cache{2}(idx);
else
result = doHardThingOnCluster(input);
cache{1}(end+1) = input;
cache{2}(end+1) = result;
end

这个简单的示例假设您的输入和输出都是可以存储在数组中的标量。如果您必须处理字符串或任何更复杂的内容,您可以使用元胞数组而不是数组进行缓存。或者事实上,也许 containers.Map 可能会更好。或者,如果您必须缓存非常大量的结果,则最好将其保存到文件并缓存文件名,然后在发现文件已被缓存时加载该文件。

希望有帮助!

关于matlab - 避免使用相同的参数重复调用模拟/函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25917252/

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