Sle*_*der 3 arrays algorithm matlab vector
我试图在MATLAB中从1xN向量(字母表)创建所有可能的1xM向量(字).N是> M.例如,我想从4x1"字母表"创建所有可能的2x1"单词" alphabet = [1 2 3 4];
我希望结果如下:
[1 1]
[1 2]
[1 3]
[1 4]
[2 1]
[2 2]
...
Run Code Online (Sandbox Code Playgroud)
我想让M成为我日常工作的输入,我事先并不知道.否则,我可以使用嵌套的for循环轻松完成此操作.无论如何要做到这一点?
尝试
[d1 d2] = ndgrid(alphabet);
[d2(:) d1(:)]
Run Code Online (Sandbox Code Playgroud)
参数化M:
d = cell(M, 1);
[d{:}] = ndgrid(alphabet);
for i = 1:M
d{i} = d{i}(:);
end
[d{end:-1:1}]
Run Code Online (Sandbox Code Playgroud)
通常,ndgrid在其库中没有的语言中,参数化for循环嵌套的方法是使用递归.
[result] = function cartesian(alphabet, M)
if M <= 1
result = alphabet;
else
recursed = cartesian(alphabet, M-1)
N = size(recursed,1);
result = zeros(M, N * numel(alphabet));
for i=1:numel(alphabet)
result(1,1+(i-1)*N:i*N) = alphabet(i);
result(2:M,1+(i-1)*N:i*N) = recursed; % in MATLAB, this line can be vectorized with repmat... but in MATLAB you'd use ndgrid anyway
end
end
end
Run Code Online (Sandbox Code Playgroud)