【问题标题】:How would I randomly pick one point from N points in MATLAB?如何从 MATLAB 的 N 个点中随机选择一个点?
【发布时间】:2009-11-29 17:16:40
【问题描述】:

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

我如何随机选择这些点之一?

【问题讨论】:

    标签: matlab


    【解决方案1】:

    您可以使用函数RANDI 生成给定范围内的随机整数:

    index = randi(N);             %# Generate a random integer in the range 1 to N
    plot(x(index),y(index),'o');  %# Plot the point
    

    编辑: 正如Mikhail 所指出的,RANDI 功能仅在版本 7.7 (R2008b) 之后才可用。对于早期版本,以下替代方案应该可以工作:

    index = ceil(rand*N);
    

    【讨论】:

    • 很好的解决方案,但如果我没记错的话,仅适用于最后几个 Matlab 版本。一般来说,MathWorks 应该把它放在帮助中,从哪个版本开始一个功能可用。
    • @Mikhail:你说得对,如果他们把它放在每个函数的在线帮助中就好了。就目前而言,您必须检查这些发布页面才能弄清楚:mathworks.com/access/helpdesk/help/techdoc/rn/rn_intro.html
    【解决方案2】:
    randnum=ceil(rand(1)*N)  %Sample a random integer in the range 0 to N
    your_node = [x(randnum),y(randnum)] %Here is the sampled node from your data set
    
    Edit: changed floor to ceil. 
    

    【讨论】:

    • 此解决方案不正确。它可以生成值0(不能用作索引)并且很少(如果有的话)生成值N。
    • 实际上,我认为您想要randnum = floor(rand(1)*N) + 1;,因为rand 生成的数字 u 具有 0
    【解决方案3】:

    只要拿第一个。作为 rand() 函数的产物,它对任何人来说都应该足够随机:-)

    plot(x(1),y(1),'o');

    【讨论】:

    • 这对于随机生成的点来说很好,但我认为这只是 OP 用来说明问题的一个例子。
    • 再一次,既然问题显然是入门级的,那么原始发布者可能会走向真正的暴行:随机反模式的改进。让我记住: int get_random_number() { return 4; /* 通过掷骰子真正随机选择。 */ }
    猜你喜欢
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 2011-09-17
    • 2018-07-19
    相关资源
    最近更新 更多