在MATLAB中从Nx1向量创建所有可能的Mx1向量

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循环轻松完成此操作.无论如何要做到这一点?

Ben*_*igt 5

尝试

[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)