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

MATLAB:如何创建N×1函数句柄,将指定句柄置于随机索引其余为0?

MATLAB:创建含随机位置函数句柄的N×1函数句柄“数组”

问题背景

已知现有MATLAB函数句柄:

f = @(t)f_0.*sin(alpha.*t).*cos(beta.*t);

需要创建名为F的N×1函数句柄“数组”(MATLAB不支持直接创建函数句柄数组),要求将f放置在任意随机索引位置,其余位置元素均为0,N为任意正整数。

例如N=3时,合法实现形式包括:

F = @(t) [f(t); 0; 0]
F = @(t) [0; 0; f(t)]
F = @(t) [0; f(t); 0]

最优实现方案

方法1:稀疏矩阵高效实现(性能优先)

这是大N场景下的最优方案,内存占用更低、运行更快:

% 生成1~N之间的随机索引
idx = randi(N);

% 构造函数句柄F
F = @(t) zeros(N,1) + sparse(idx, 1, f(t), N, 1);

方法2:数组遍历实现(可读性优先)

如果更看重代码逻辑的直观性,可采用此方案:

idx = randi(N);

% 先构造返回cell数组的函数句柄,再转成数值数组
F = @(t) cell2mat(arrayfun(@(k) k == idx ? f(t) : 0, 1:N, 'UniformOutput', false));

方案说明

  • 随机索引生成:randi(N)直接生成1到N范围内的随机整数,确定f(t)的放置位置。
  • 稀疏矩阵方案:
    • 先创建全零的N×1数组,再通过sparse(idx,1,f(t),N,1)生成仅在指定位置有值的稀疏矩阵,两者相加得到目标数组;
    • 稀疏矩阵仅存储非零元素,内存占用远低于全量数组,大N场景下效率优势明显。
  • 数组遍历方案:
    • arrayfun遍历1到N的每个位置,判断当前位置是否等于随机索引,是则返回f(t),否则返回0;
    • 由于arrayfun默认返回cell数组,需用cell2mat转换为N×1的数值数组,逻辑直观易理解。

验证示例

当N=5且随机索引idx=3时,调用F(t)会返回如下N×1数组:

0
0
f(t)
0
0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 19:54:50