生成正/负1整数的伪随机序列

con*_*rt3 2 random matlab sequence prng

任何人都可以帮我用Matlab创建一个长度为1000的简单伪随机序列+ -1整数?

即一个序列,如

-1 -1 1 1 -1 -1 1 -1 -1 -1 1 1 1 1 -1 -1 -1 -1 1 
Run Code Online (Sandbox Code Playgroud)

我尝试使用下面的代码,但这是RANGE -1到1,其中包含0个值.我只想要-1和1.谢谢

x = randi([-1 1],1000,1);
Run Code Online (Sandbox Code Playgroud)

ray*_*ica 5

您可以尝试生成一个随机的浮点数序列,[0,1]并将任何小于0.5的值设置为-1,将任何大的值设置为1:

x = rand(1000,1);
ind = x >= 0.5;
x(ind) = 1;
x(~ind) = -1;
Run Code Online (Sandbox Code Playgroud)

我的另一个建议是使用sign结合的功能,randn以便我们可以生成正数和负数. sign生成值为-1,0,1的值,具体取决于输入的符号.如果输入为负,则输出为-1,正数时为+1,0时为0.您可以对输出为0的任何值进行额外检查,将它们设置为-1或1:

x = sign(randn(1000,1));
x(x == 0) = 1;
Run Code Online (Sandbox Code Playgroud)

还有一个(灵感来自Luis Mendo)将有一个矢量[-1,1]并用于randi生成1或2的序列,然后使用它并将样本放入此向量中:

vec = [-1 1];
x = vec(randi(numel(vec), 1000, 1));
Run Code Online (Sandbox Code Playgroud)

这个代码可以扩展到vec你想要的任何地方,我们可以从任何元素中抽样vec产生一个随机的值序列(Luis Mendo观察.谢谢!).

  • 多谢你们!使用vec的第三个建议很漂亮!:d (2认同)