【问题标题】:How do I randomly select k points from N points in MATLAB?如何在 MATLAB 中从 N 个点中随机选择 k 个点?
【发布时间】:2010-12-23 18:58:47
【问题描述】:

我使用此代码创建和绘制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,'*');

如何从N 点中选择k 点(概率为p=0.25),然后将那些k 点涂成红色并将其他点保留为*

【问题讨论】:

  • 您的最后一条语句与自身冲突。您是想从N 值中随机选择k 值,还是想从一个长度为N 的向量中以概率p 随机选择值?这两种方法可能会产生不同的结果。

标签: matlab


【解决方案1】:

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

  • N 值中选择k

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

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

    您可以使用RAND 函数为您的每个N 值从01 中选择一个随机值,然后选择随机值小于或等于您的平均概率@ 987654340@ 并将它们重新绘制为红色:

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

【讨论】:

【解决方案2】:

据我了解,对于每个N 随机点,您要掷硬币来决定是否选择它(其中硬币的成功概率为p=0.25!)

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))

【讨论】:

  • 非常感谢,我也需要那些 k 选择的点,正如你所说的 data(~index,:)=[];谢谢你的帮助
  • 如果我们必须找到任何数据点之间的距离=rand(N,2)(首先说)与任何数据点之间的距离(~index, :) = [];(首先说这个还有),我们如何使用 data(~index, :) = [];以下语句中的矩阵? dist=sqrt((数据(1,1)-数据(~index,1))^2+(数据(1,2)-数据(~index,2))^2)。我的问题是我们将数据的第一个元素作为数据(1,1)和数据(1,2)。我们如何获取 data(~index,:) 矩阵的第一个元素?
  • 我不太确定我理解这个问题,但知道data(~index,:)=[] 只是删除了所有未选择的元素。因此,如果您打算同时使用选定点和未选定点,则不应删除它们,而是可以将它们存储在两个不同的矩阵中:selected = data(index,:);not_selected = data(~index,:);。然后,如果您想从一组计算两点 ij 之间的距离,请使用:dist_ij = sqrt(sum((selected(i,:)-not_selected(j,:)).^2));
  • 再次感谢我的朋友,因为你没有先从这里回复,所以将它作为另一个问题发布。我可以从董事会中删除这个问题还是让我去那里?无论如何,谢谢
  • @amro selected = data(index,:);给我以下错误???索引超出矩阵维度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多