在 MATLAB 中生成可变数量向量的所有组合
generate all combinations of a variable number of vectors in MATLAB
我正在寻找一种生成矩阵的方法,该矩阵包含 MATLAB 中的所有向量组合,如下所示
>> combvec(1:3,2:4)
ans =
1 2 3 1 2 3 1 2 3
2 2 2 3 3 3 4 4 4
正如我们所见,上面的例子给出了两个向量,即1:3
和2:4
。然而,如果我们有一个可变数量的向量,例如,v1,v2,...vn
(其中n
没有给出),那么如何生成所有的组合呢?
例如,给定 v1,v2,...vn
,是否有任何方法可以生成与 combvec(v1,v2,...vn)
相同的结果,但无需写下所有 n
向量(因为 n
可能是数量很大,每次都不同)?
如果作为参数传递,您可以使用 mycell{:}
解压单元格;单元格的每个元素都将被解释为一个新参数:
v1 = [1,2,3];
v2 = [2,3,4];
v3 = [3,4,5];
% We put everything in a cell
v = {v1,v2,v3};
% We unpack our cell into combvec
combvec(v{:})
当然这个例子没什么用,但在实际情况下,您可以简单地将向量直接存储在单元格中 v{ii} = ...
我正在寻找一种生成矩阵的方法,该矩阵包含 MATLAB 中的所有向量组合,如下所示
>> combvec(1:3,2:4)
ans =
1 2 3 1 2 3 1 2 3
2 2 2 3 3 3 4 4 4
正如我们所见,上面的例子给出了两个向量,即1:3
和2:4
。然而,如果我们有一个可变数量的向量,例如,v1,v2,...vn
(其中n
没有给出),那么如何生成所有的组合呢?
例如,给定 v1,v2,...vn
,是否有任何方法可以生成与 combvec(v1,v2,...vn)
相同的结果,但无需写下所有 n
向量(因为 n
可能是数量很大,每次都不同)?
如果作为参数传递,您可以使用 mycell{:}
解压单元格;单元格的每个元素都将被解释为一个新参数:
v1 = [1,2,3];
v2 = [2,3,4];
v3 = [3,4,5];
% We put everything in a cell
v = {v1,v2,v3};
% We unpack our cell into combvec
combvec(v{:})
当然这个例子没什么用,但在实际情况下,您可以简单地将向量直接存储在单元格中 v{ii} = ...