我想知道如何随机生成-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]
不是我想要的。
答案 0 :(得分:3)
N个元素的一个衬里:
2*randi(2, 1, N) - 3
或者更清楚
(-1).^randi(2, 1, N)
答案 1 :(得分:2)
有几种方法可以做到这一点。
您可以创建一个由[-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);
您还可以生成随机均匀分布的浮点值,任何大于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;
您可以使用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);