如何确定随机数向量的所有组合?

时间:2015-03-16 12:27:14

标签: matlab for-loop combinations combinatorics

我有n个带有一些数字的向量(n是一个随机数) 我如何确定我拥有的所有数字的所有组合? 例如:

    a=0;
    for i=1:length(vector1)
      for j=1:length(vector2)
        for k=1:length(vector3)
          ... (n times)
          a=a+1;
          M{a}=[i,j,k,...];
        end
      end
    end

1 个答案:

答案 0 :(得分:2)

一种可能性combvec。此函数为您提供输入矩阵的列向量的所有组合。您可以执行以下操作来获取随机向量中的元素组合。

vector1 = random('Normal', 0, 1, 1, 5);
vector2 = random('Normal', 0, 1, 1, 5);
vector3 = random('Normal', 0, 1, 1, 5);
M = combvec(vector1, vector2, vector3);

M将是一个3x125矩阵,其中每列是vector1中的一个元素,vector2中的一个元素和vector3中的一个元素

如果你想要n个向量,其中n是一个随机数,另一种方法是使用cartesian product来索引向量。

n = randi(5);
all_vectors = random('Normal', 0, 1, n, 5);
indices = mat2cell(repmat([1:5], n, 1), ones(n ,1))';
[x y z] = ndgrid(indices{:});
cartProd = [x(:), y(:), z(:)];
M = all_vectors(cartProd);