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
相关产品推荐
相关产品推荐

