matlab - 将数组处理为函数参数
问题描述
我有一个接受多个标量输入的函数(通过符号工具箱创建):
scalarFn = @(a,b,c) a .* b + c
我想更改此函数,以便它接受单个输入并将向量的元素处理为上述函数的输入参数:
vectorFn = @(theta) theta(1) .* theta(2) + theta(3)
我玩过deal
和或结合num2cell
索引{:}
,但我还没有弄清楚如何编写这个函数。
最终,我想要一个函数,它接受一个函数句柄scalarFn
(但不一定只有 3 个参数 - 很可能更多),并返回一个vectorFn
只有一个输入作为向量的新函数句柄。有没有办法做到这一点?
解决方案
作为一个笨拙的答案,我知道我可以用一个eval
声明来做到这一点:
vectorFn = eval(['@(theta) scalarFn(' strjoin(arrayfun(@(x) ['theta(' num2str(x) ')'], 1:nargin(scalarFn), 'Uniform', false), ', ') ')']);
scalarFn(1,2,3)
vectorFn([1 2 3])
但这似乎是一个特别不可靠的解决方案。
推荐阅读
- javascript - 语义 UI 模态高度太长
- string - 使用 Lua 匹配整个精确的文本行
- reactjs - React Native Image Picker 不运行任何 ImagePicker 函数?
- typescript - 将 gatsby-plugin-typescript 添加到 GatsbyJS “React 未定义”
- java - 简单的 Spring Boot 应用程序中使用了哪个 ApplicationContext 实现?
- php - 正则表达式:将单个等号与负前瞻匹配 =
- wordpress - wp-api cookie 身份验证 wpApiSettings 未定义
- excel - 第一次返回 test 为 true 的行的函数,然后是第二次,然后是第三次等
- javascript - 无法访问 Electron 渲染器进程中的某些 DOM 方法
- netsuite - Netsuite SuiteCloud IDE 如何将管理员用户设置为没有双重身份验证