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

Matlab转Scilab:ndgrid函数单元格数组输入输出问题求助

解决Scilab中动态参数调用ndgrid并将结果存入单元格数组的问题

问题原因

Scilab的ndgrid函数不像Matlab那样支持直接通过v{:}展开单元格数组作为输入参数,它要求每个输入是独立的向量/数组,因此直接传入解包后的单元格元素会触发类型错误。

解决方案:通过动态构造执行语句实现

我们可以利用Scilab的evstr函数动态生成并执行ndgrid的调用语句,再将结果存入单元格数组,完美适配动态数量的输入参数场景:

// 示例输入:动态长度的单元格数组(这里以2个向量为例,可扩展到任意长度)
v = {0:3, 0:3};
n = length(v); // 获取输入向量的数量

// 1. 构造输出变量名和输入参数的字符串
output_vars = strcat(["G"+string(i) for i=1:n], ", ");
input_vars = strcat(["v{"+string(i)+"}" for i=1:n], ", ");

// 2. 构造ndgrid的调用语句并执行
exec_str = "[" + output_vars + "] = ndgrid(" + input_vars + ");";
evstr(exec_str);

// 3. 将临时变量存入目标单元格数组G
G = cell(1, n);
for i=1:n
    G(i) = evstr("G"+string(i));
end

// 可选:清理临时生成的变量,避免污染工作区
for i=1:n
    clear("G"+string(i));
end

验证效果

执行上述代码后,G{1}和G{2}的结果与Matlab中[G{:}] = ndgrid(v{:})的输出完全一致:

  • G{1}是一个4×4的矩阵,每行都是[0,1,2,3]
  • G{2}是一个4×4的矩阵,每列都是[0;1;2;3]

适配任意长度的输入

无论v的长度是2、3还是更多,这段代码都能自动适配,无需修改核心逻辑,完全满足你动态设定输入数量的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:24:40