如何生成只有-1和1的随机序列?

时间:2015-10-26 05:07:37

标签: matlab random

我想知道如何随机生成-​​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]不是我想要的。

2 个答案:

答案 0 :(得分:3)

N个元素的一个衬里:

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

或者更清楚

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

答案 1 :(得分: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);