【问题标题】:How do you generate a random sequence of only -1 and 1?你如何生成只有-1和1的随机序列?
【发布时间】:2015-10-26 05:07:37
【问题描述】:

我想知道如何随机生成-​​1或1的序列。

例如:

[1 1 -1 -1] or
[-1 1 -1 1 1 1 1 -1 ] or 
[-1 1 1 -1 1 -1 -1] are what I expect.

[-1 0 1 -1 -1][2 1 -1 -1 1 1] 不是我想要的。

【问题讨论】:

    标签: matlab random


    【解决方案1】:

    N 个元素的一个衬里:

    2*randi(2, 1, N) - 3
    

    或者更清楚

    (-1).^randi(2, 1, N)
    

    【讨论】:

    • 第二种方法很聪明。
    • 第二种方法太聪明了!!
    【解决方案2】:

    有几种方法可以做到这一点。

    方法 #1 - 从小数组中选择

    您可以创建一个包含[-1 1] 的小数组,然后创建包含 1 或 2 的随机整数并索引到该序列中:

    N = 10; %// Number of values in the array
    
    %// Generate random indices
    ind = randi(2, N, 1);
    
    %// Create small array
    arr = [-1; 1];
    
    %// Get final array
    out = arr(ind);
    

    方法 #2 - 从均匀随机分布和阈值生成值

    还可以生成随机均匀分布的浮点值,大于0.5的可以设置为1,小于的可以设置为-1。

    N = 10; %// Number of values in the array
    
    %// Generate randomly distributed floating point values
    out = rand(N, 1);
    
    %// Find those locations that are >= 0.5
    ind = out >= 0.5;
    
    %// Set the right locations to +1/-1
    out(ind) = 1;
    out(~ind) = -1;
    

    方法 #3 - 使用三角函数

    您可以使用cos(n*pi) 可以给出1 或-1 的事实,这取决于n 的值,只要n 是一个整数。奇数产生-1,偶数产生1。因此,您可以生成一堆1或2的随机整数,并计算cos(n*pi)

    N = 10; %// Number of values in the array
    
    %// Generate random integers
    ind = randi(2, N, 1); 
    
    %// Compute sequence via trigonometry
    out = cos(ind*pi);
    

    【讨论】:

    • 方法 #7 不保证适用于大型 Ncos(9e7*pi)-1 不等于零。
    • @MohsenNosratinia - 是的。但是,如果您看到生成的值的范围,这会给出随机整数 1 和 2...,而不会给出 N 的大值。但是,N 的值是 1 或 2....因此,cos(pi)cos(2*pi) 定义明确。请重新阅读代码并确保这是所描绘的信息。如果不是,请告诉我如何改写它。
    • 有方法#7吗?我只看到 3 个。
    • 没有方法7!我也只看到 3 个?
    • 方法#7,N小,取硬币翻转,Head = 1,Tail = -1;警告:不保证成功和数学上正确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多