向函数句柄添加记忆语义
记忆有关是一种优化技术,用于缓存昂贵的函数调用的结果,并在使用相同的输入调用程序时返回缓存的结果,从而提高程序的速度。
考虑记住一个函数调用,如果下列条件都是真的:
性能是很重要的。
该功能非常耗时。
该函数的返回值完全由输入值决定,并且没有副作用。
系统内存足以存储唯一的输入和输出组合。
memoizedFcn = memoize的(
向输入函数句柄添加记忆语义,并返回跳频
)MemoizedFunction
对象。调用memoizedFcn
就像你会调用跳频
.然而,memoizedFcn
不是函数句柄。
的MemoizedFunction
对象维护输入和相应输出的缓存。当调用它时,MATLAB®如果下列条件为真,则返回相关的缓存输出值。
输入参数在数值上等于缓存的输入。当比较输入值时,MATLAB处理南
年代,是平等的。
请求的输出参数的数量与与输入相关联的缓存输出的数量相匹配。
函数的记忆与输入函数有关,而与函数无关MemoizedFunction
对象。因此,请记住以下几点。
建设一个新MemoizedFunction
对象创建对相同数据的另一个引用。记忆同一函数的两个变量共享一个缓存和对象属性值,例如缓存大小。在下面的例子中,变量一个
和b
共享一个缓存并具有相同的缓存大小值。
一个= memoize (@svd);b = memoize (@svd);
b
(b.clearCache
)也清除缓存一个
,和其他变量的记忆圣言会
函数。clearCache
是一个MemoizedFunction
对象的功能。分配一个MemoizedFunction
对象的新变量将创建对相同数据的另一个引用。在下面的例子中,变量c
和d
共享数据。
c = memoize (@svd);d = c;
清除变量并不清除与输入函数关联的缓存。为。清除缓存MemoizedFunction
对象不再存在于工作区中时,创建一个新的MemoizedFunction
对象,并使用clearCache
函数的新对象。或者,您可以清除所有缓存MemoizedFunction
对象的使用clearAllMemoizedCaches
函数。
谨慎
一个MemoizedFunction
对象不知道对底层函数的更新。如果修改了与该记忆函数关联的函数,请使用clearCache
对象的功能。
多个电话memoize的
用相同的函数句柄返回相同的MemoizedFunction
对象。例如:
x = memoize (@plus);y = memoize (@plus);x = = y
逻辑1
您不应该记忆具有副作用的函数,例如设置某些全局状态或执行I/O操作。对具有相同输入的已记忆函数的后续调用不会重复出现副作用。例如,如果你记住兰迪
函数,当调用具有相同输入参数的函数时,记忆的函数总是返回相同的值。
跳频= @randi;memoized_fh = memoize(跳频);Fh_result = [fh(100) fh(100) fh(100)] memoized_result = [memoized_fh(100) memoized_fh(100)]
Fh_result = 18 71 4 memoized_result = 28 28 28