我使用这段代码来创建并绘制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
个点:
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
个值,这将确保您始终选择k
个点。第二种解决方案是随机选择每个值,每个值被选中的平均概率为p
,这可能导致随机选择的点数量少至0
或多至N
。
从N
个值中选择k
个:
您可以使用RANDPERM函数创建整数1
到N
的随机排列,然后选择排列列表中的前k
个值并重新绘制为红色:
index = randperm(N);
plot(x(index(1:k)),y(index(1:k)),'r*');
使用平均概率 p
选择值:
你可以使用RAND函数从0
到1
中随机选取一个值,对于你的N
个数中的每一个都这样做,然后选择那些随机值小于等于你的平均概率p
的数,并将它们重新绘制为红色:
index = (rand(N,1) <= p);
plot(x(index),y(index),'r*');
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
fprintf('1st = %d \n', p*N)
fprintf('2nd = %d \n', sum(rand(N,1) <= p))
data(~index,:)=[]
只是删除未选择的所有元素。因此,如果您计划同时使用选定和未选定的点,则不应将它们删除,而是可以将它们存储在两个不同的矩阵中:selected = data(index,:);
和 not_selected = data(~index,:);
。然后,如果您想要计算来自一个集合的两个点 i
和 j
之间的距离,请使用:dist_ij = sqrt(sum((selected(i,:)-not_selected(j,:)).^2));
- Amro