我在任何地方都找不到这种语法
y = @(beta, x)x*beta;
x
可以说一些向量或矩阵在哪里。用于引用另一个函数,以便您@
可以在同一个文件中拥有多个外部可见函数.m
?抱歉,我是 matlab 新手,但在文档中找不到
我在任何地方都找不到这种语法
y = @(beta, x)x*beta;
x
可以说一些向量或矩阵在哪里。用于引用另一个函数,以便您@
可以在同一个文件中拥有多个外部可见函数.m
?抱歉,我是 matlab 新手,但在文档中找不到
这就是在 Matlab 中定义匿名函数的方法。基本上是一样的
function result = y(beta, x)
result = x * beta;
但不需要 m 文件或子函数来定义它。它们可以在其他 m 文件中构建,甚至可以在表达式中构建。典型的用途是在一些复杂函数的调用中作为一次性函数,需要一个函数作为其输入之一,即:
>> arrayfun(@(x) x^2, 1:10)
ans =
1 4 9 16 25 36 49 64 81 100
我个人经常使用它们来重构重复语句的列表
a = complex_expression(x, y, z, 1)
b = complex_expression(x, y, z, 3)
c = complex_expression(x, y, z, 8)
进入
f = @(n) complex_expression(x, y, z, n)
a = f(1)
b = f(3)
c = f(8)
来自 Mathworks 的更多信息。它们或多或少与 Python 中的 lambda 表达式相同。
将其@
视为匿名函数,这意味着一个未命名的函数(从技术上讲,在 MATLAB 中,您必须给它一个名称,因为您不能这样做,例如(@(x, y) x + y)(1, 2)
,该名称是您将匿名函数分配给的任何变量)。
语法@(x, y) x + y
如下:创建一个带参数的匿名@
函数,x
并在下一个右括号之后返回表达式y
的评估结果。在这种情况下,这是添加和。x
y
我认识的几乎没有人定期使用 MATLAB 而是使用repmat
地狱代替的一件事是bsxfun
(它代表二进制单例扩展)。
使用表达式bsxfun(@plus, randn(1000, 20), randn(1000, 1))
,您基本上repmat
在右手边 20 次以形成一个新矩阵,然后您将其传递给@plus
函数句柄。您可以通过这种方式传递任何函数。看看cellfun
和arrayfun
。它们非常有用。