Matlab有一个很好的属性,标量函数(例如sin)可以在数组上工作,对数组的任何元素进行操作并返回数组作为结果.
我有一个标量函数f(x,p)
,其中x
是一个标量,并且p
是一个参数(实际上是一个参数数组).给定一个固定的参数p
,我希望f(x,p)
在一个数组上运行A
.在像Ruby这样的语言中,它看起来像这样:
A.collect{|x| f(x,p)}
Run Code Online (Sandbox Code Playgroud)
但我不知道如何在Matlab中为接受参数的函数而不仅仅是我想要操作的数组中的标量.
MATLAB的等价物是提供一个只接受一个参数的函数句柄,并将其发送给arrayfun
.
arrayfun( @(x) f(x, p), A )
Run Code Online (Sandbox Code Playgroud)
例如,
A = 1:10;
p = 2;
arrayfun( @(x) x.^p, A )
Run Code Online (Sandbox Code Playgroud)
请注意,匿名函数创建一个闭包,捕获值p
.