如何在MATLAB中从N个点中随机选择k个点?

时间:2009-12-06 18:25:44

标签: matlab

我使用此代码创建并绘制N点:

N=input('No. of Nodes:');
data = rand(N,2) % Randomly generated n no. of nodes
x = data(:,1);
y = data(:,2);
plot(x,y,'*');

如何从k点中选择p=0.25点(概率N),然后将这些k点着色为红色,将其他点保留为{{1 }}

2 个答案:

答案 0 :(得分:27)

您可以采取两种方法。第一种解决方案是从k值中随机选择N值,这将确保总是选择k个点。第二种解决方案是随机选取值,每个值都选择了平均概率p,这可能导致随机选择0N一样少。

  • k值中挑选N

    您可以使用函数RANDPERM创建整数1N的随机排列,然后选择置换列表中的第一个k值并重新绘制它们为红色:

    index = randperm(N);
    plot(x(index(1:k)),y(index(1:k)),'r*');
    
  • 以平均概率p挑选值:

    您可以使用RAND函数为每个0值从1N选择随机值,然后选择随机值较小的值大于或等于你的平均概率p并将它们重新标记为红色:

    index = (rand(N,1) <= p);
    plot(x(index),y(index),'r*');
    

答案 1 :(得分:3)

根据我的理解,对于每个N随机点,您想要翻转硬币以决定是否选择它(硬币的成功概率为p=0.25!)< / p>

data = rand(N,2);             %# generate random points
index = (rand(N,1) <= p);     %# roll coins to pick with prob p
data(~index, :) = [];         %# keep only selected points

这最终相当于只在第一个位置生成p*N个随机点(至少你在N变大的时候接近这个数字)......

data = rand(p*N, 2);          %# directly generate p*N number of points


你可以测试N的各种值的最后一个语句:

fprintf('1st = %d \n', p*N)
fprintf('2nd = %d \n', sum(rand(N,1) <= p))