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