You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB优化:如何高效用匿名函数实现y(idx)=x赋值

MATLAB优化场景中高效构造目标向量的匿名函数方案

需求说明

在MATLAB优化场景中,需将匿名函数传入优化函数。待最小化函数以x为优化变量,需构造N维零向量y:仅在指定索引idx的位置赋值为x。由于匿名函数不支持直接赋值操作,现有实现效率偏低,需更高效的方案。

基础逻辑示例

常规赋值逻辑的代码示例:

N = 100;
idx = [2 7 9]';
x = rand(size(idx));
y = zeros(N,1);
y(idx) = x;

现有低效实现

当前采用arrayfun逐元素判断赋值,效率较低:

iif = @(varargin) varargin{2 * find([varargin{1:2:end}], 1, 'first')}();
y = arrayfun(@(k) iif(ismember(k,idx),x(idx==k),true,0),0:N-1)';

该实现通过逐元素遍历、多次查找匹配完成赋值,当N较大时,时间复杂度会显著上升。

高效匿名函数实现

方案1:利用匿名函数内的临时变量构造

通过在匿名函数内构造临时变量并完成索引赋值,利用MATLAB向量化操作提升效率:

% 确保N和idx在匿名函数定义的工作区中可见
y_fun = @(x) (z = zeros(N,1); z(idx) = x; z);

方案2:稀疏矩阵转全矩阵构造

借助稀疏矩阵的快速构造特性,效率更优(尤其当N远大于idx长度时):

y_fun = @(x) full(sparse(idx, ones(size(idx)), x, N, 1));

效率说明

两种高效方案均采用向量化操作,时间复杂度为O(M)(M为idx的长度),而非原实现的O(N)。当N远大于M时,速度提升效果极为明显,更适合大规模优化场景。

内容的提问来源于stack exchange,提问作者pheon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 15:12:38