Matlab中如何将函数输出向量的各元素分别赋值给不同变量
直接将MATLAB函数返回的3元素向量赋值给多个变量的方法
当然可以实现!不过得先理清一个关键点:你的函数是返回单一的3元素向量(一个输出变量),而不是三个独立的输出值,所以直接用[a,b,c] = myFunc()会触发“Too many output arguments”的报错——因为MATLAB会认为你在索要三个输出,但函数只返回一个。
不过有几种简洁的方式可以跳过临时变量,直接把向量的三个元素分配给不同变量:
方法1:利用num2cell+元胞展开(推荐,仅调用函数一次)
这种方法只会调用函数一次,避免了重复执行的副作用(比如随机数生成、文件读写等场景),代码也很简洁:
[a, b, c] = num2cell(myFunc()){:};
原理是先通过num2cell把3元素向量转换成3个元素的元胞数组,再用{:}把元胞数组展开成三个独立的值,最后直接赋值给三个变量。
方法2:结合deal函数(兼容旧版本MATLAB)
如果你的MATLAB版本比较旧(比如早于R2020b),上面的元胞直接展开可能不支持,这时候可以用deal函数来分配值:
[a, b, c] = deal(num2cell(myFunc()){:});
作用和方法1完全一样,只是多了一层deal来完成变量赋值。
方法3:直接索引赋值(谨慎使用)
你也可以直接通过索引获取向量的每个元素,但要注意:这种方式会三次调用你的函数,如果函数有副作用(比如每次返回不同的随机向量),结果会不符合预期:
[a, b, c] = deal(myFunc()(1), myFunc()(2), myFunc()(3));
所以这个方法只适合纯函数(输入相同则输出完全一致,无任何副作用)。
额外提示:如果能修改函数的话
要是你有权限修改这个函数,最直接的方式是把它改成返回三个独立的输出变量,而不是一个向量:
function [x, y, z] = myFunc() vec = [10, 20, 30]; % 原来的向量生成逻辑 x = vec(1); y = vec(2); z = vec(3); end
之后直接调用[a,b,c] = myFunc()就可以一步完成赋值,这也是MATLAB推荐的多输出变量使用方式。
内容的提问来源于stack exchange,提问作者Pedro
相关产品推荐
相关产品推荐

