我有一个MATLAB函数myfun(v1,v2,v3,v4,v5,v6)
和一个30x6矩阵A
。调用该函数的方法是将A
的每一列作为单独的输入参数传递:
myfun(A(:,1),A(:,2),A(:,3),A(:,4),A(:,5),A(:,6))
只是想知道在没有明确写出这么多次A(:,*)
的情况下是否有更好的方法来做到这一点?
答案 0 :(得分:5)
您可以先使用函数NUM2CELL将A
的每一列放在单元格数组的单元格中,然后使用{:}
将单元格数组内容作为comma-separated list传递语法:
B = num2cell(A,1);
myfun(B{:});
答案 1 :(得分:2)
重写你的函数以接受这两个约定:
function [] = myfun(v1,v2,v3,v4,v5,v6)
if nargin==1
v2 = v1(:,2);
v3 = v1(:,3);
v4 = v1(:,4);
v5 = v1(:,5);
v6 = v1(:,6);
v1 = v1(:,1);
end
%# use v1,v2,v3,v4,v5,v6
%# ...
end
现在你可以同时打电话:
myfun(A(:,1),A(:,2),A(:,3),A(:,4),A(:,5),A(:,6))
myfun(A)
通常你会做更多的验证来测试正确数量的参数......