我是Matlab的新手,遇到以下问题。
我正在使用外部函数“allcomb”,它允许我创建数组元素的组合。
例如,我有一个数组C [1 2 3 4]和一个介于1到20之间的任何值的整数X.我想要的结果很简单,
if X is 1, my function will be allcomb(C)
if X is 2, my function will be allcomb(C,C)
if X is 6, my function will be allcomb(C,C,C,C,C,C)
......等等。
而不是创建if条件,这样做的更好方法是什么?
感谢您的关注
答案 0 :(得分:0)
假设'allcomb'的输出转到某个变量'out'(即“out = allcomb(C,C,C);;”对于X = 3),我认为这可能有效 -
out_string = 'out = '; %// Edit this to change output behaviour.
%// For example set it to empty string '' if no output
%// is needed.
str1 = repmat('C,',[1 X]);
str1(end) = [];
evalc_string = [out_string 'allcomb(' str1 ');'];
evalc(evalc_string);
这真是一个肮脏的黑客。如果您拥有'allcomb'的可编辑权限,那么将variable-length input method用于MATLAB函数会更明智。
答案 1 :(得分:0)
使用字符串的方法不是必须的,请改用comma separated list运算符 :
:
C = [1 2 3 4];
X = 2
in = repmat( {C}, X, 1 )
allcomb( in{:} )
例如allcomb
只显示输入:
function allcomb( varargin )
celldisp(varargin)
end
返回X = 2
:
varargin{1} =
1 2 3 4
varargin{2} =
1 2 3 4
和X = 4
:
varargin{1} =
1 2 3 4
varargin{2} =
1 2 3 4
varargin{3} =
1 2 3 4
varargin{4} =
1 2 3 4
答案 2 :(得分:0)
C = [1 2 3 4];
n = 6; %// number of arguments (all equal to C) to pass to allcomb
CC = mat2cell(repmat(C,n,1),ones(1,n),numel(C)); %// nx1 cell array containing C
allcomb(CC{:}) %// call allcomb. Note CC{:} is just C,C,...C (n times)