【问题标题】:How to assign each element/column of output to a different variable如何将每个元素/输出列分配给不同的变量
【发布时间】:2018-08-04 15:46:42
【问题描述】:
在 Matlab 中,一些函数会根据调用中输出变量的数量调整其输出。例如我可以这样做:
A=[[1 2 3];[4 5 6]];
s=size(A);
我得到了
s=[2, 3];
但如果我想独立处理宽度和高度,我可以这样做:
[h, w]=size(A);
我得到:
h=2;
w=3;
现在,如果我有一个函数总是输出一个向量,比如说 3 个元素。 有没有办法将每个元素分配给不同的变量?
我的意思是避免这样的风景:
pos=getPosition();
X=pos(1);
Y=pos(2);
Z=pos(3);
我希望我已经解释了我的意思。
【问题讨论】:
标签:
matlab
vector
variable-assignment
【解决方案1】:
我也遇到了同样的问题。主要是在你的例子中处理坐标的函数。我的解决方案是创建以下函数:
function varargout = dealOneByOne(vector)
% Assign each column of vector to each variable on the output variables
%
for i=1:size(vector,2)
varargout{i}=vector(:,i);
end
end
那你就可以了
[X,Y,Z]=dealOneByOne(getPosition());
我不知道有更简单的方法。
【解决方案2】:
让我们定义一个测试函数如下:
function x = test()
x = [1 2 3];
end
鉴于上面的函数,这是我通常会执行的操作,以便将输出数组拆分为许多不同的变量:
out = num2cell(test());
[a,b,c] = deal(out{:});
可以定义一个包装函数以避免将上述赋值分散到多行:
[a,b,c] = vout_num(test());
function varargout = vout_num(x)
C = num2cell(x);
varargout = C(:).';
end
在您的示例中,包装函数将按如下方式使用:
[X,Y,Z] = vout_num(getPosition());