【问题标题】:Choose k vectors from n vectors in Matlab在 Matlab 中从 n 个向量中选择 k 个向量
【发布时间】:2016-04-21 22:17:20
【问题描述】:

假设有一个由三个行向量组成的矩阵

A = [1,2;
     1,3;
     2,3]

我想创建一个新的矩阵 B,它从 A 中重复绘制两个向量,并且有 3^2 种可能的组合。一些简单的实现如下:

For i = 1:3
    c = A(i,:);
    for j=1:3
        d = A(j,:);
        B = [c;d];
    end
end

但是,一般来说,如果我需要从n 向量中选择k 向量,那么编写这种循环的更一般的方法是什么?使用ij,......我猜很难继续写循环。谢谢!

【问题讨论】:

标签: matlab random-sample


【解决方案1】:

对于随机抽样,matlab有randsample

rowIdx = randsample( size(A,1), k, true );
B = A(rowIdx,:);

【讨论】:

  • 谢谢!但也许我错了,如果我使用这种随机抽样,它只返回一个实例?如何跟踪从 n 个向量中抽取的 k 个可能的所有组合?在这种情况下,有 9 种可能性,如何找出所有 9 种情况?
  • @ximu 那么你需要使用nchoosek函数
【解决方案2】:

您可以只使用randi 来选择k1:n 范围内均匀分布的数字(带替换)

k = 2;
n = size(A,1);
rowIdx = randi(n,k)
B = A(rowIdx,:)

【讨论】:

    【解决方案3】:

    感谢您之前的所有建议。 最后我弄清楚我想要的是所谓的重复排列。来自文件交换的 matlab 函数permun 解决了我的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多