【问题标题】:Generate vectors and each element in the vector has K possibilities生成向量,向量中的每个元素都有K个可能性
【发布时间】:2016-10-08 22:05:52
【问题描述】:

我想生成一组长度为 N 的向量。向量中的每个元素都有 K 种可能性(从整数 1 到 K 中选择)。 例如,如果 N=2 且 K=2,则向量集为 [0 0], [0 1], [1 0] 和 。 [1 1]。基本上,我要生成的向量数量等于 K^N。

【问题讨论】:

  • 每个条目的 K 是否相同?
  • 是的,第一个元素是从 1 到 K 中选择的。其他元素也是如此。
  • 您想要的是笛卡尔积。您可以使用 this answer 和输入 vectors = repmat({0:K-1}, 1, N);

标签: matlab vector combinations permutation


【解决方案1】:

asked a similar question昨天在MATLAB聊天;我不确定最有效的方法是使其适应任何通用 K。

一种可行的解决方案,但效率低下,因为它不断调整 out 的大小:

out = [1:K]'
for ii = 2:N
    out = [ repmat(out,K,1) repelem([1:K]', K^(ii-1), 1)];
end

【讨论】:

    【解决方案2】:

    第一种方式

    这种方法是基于这样一个事实,即这些向量看起来像一个数字序列的基本K 表示:

    N = 2;
    K = 2;
    out = zeros(K^N, N);
    vec = (0:K^N-1).';
    for k = N:-1:1
        out(:,k) = mod(vec, K);
        vec = floor(vec/K);
    end
    

    有了这个输出:

    out =
    
         0     0
         0     1
         1     0
         1     1
    

    out(k,:) 是你的k'th 向量。请注意,如果您更喜欢使用[1 1][1 2]、...,您可以简单地将1 添加到out

    out + 1 =
    
         1     1
         1     2
         2     1
         2     2
    

    第二种方式:

    由于repelem 是在 R2015a 中添加的,如果您使用的是旧版本的 Matlab,您应该使用它的替代品。就可读性而言,一种方便的解决方案是kron函数:

    N = 2;
    K = 2;
    vec = (0:K-1).';
    out = zeros(K^N, N);
    for k = 1:N
        out(:, k) = repmat(kron(vec, ones(K^(N-k), 1)), K^(k-1), 1);
    end
    

    与上面相同的out

    【讨论】:

      【解决方案3】:

      这是一个通用解决方案(如果您有 MATLAB 2015a 或更高版本):

      N = 3;
      elem = [6 9 4]; % you can change this to be any vector
      K = numel(elem);
      out = zeros(K^N,N);
      for k = 1:N
          out(:,k) = repmat(repelem(elem,K^(N-k)).',K^(k-1),1);
      end
      

      所以对于N = 2elem = 1:2 你会得到:

      out =
           1     1
           1     2
           2     1
           2     2
      

      out 的每一行都是一个独特的组合。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-11
        相关资源
        最近更新 更多