【问题标题】:Uniform distribution of binary values in MatlabMatlab中二进制值的均匀分布
【发布时间】:2010-03-14 12:36:23
【问题描述】:

我需要生成给定数量的 N 个给定大小的向量,每个向量都符合 0 和 1 的均匀分布。

这就是我目前正在做的事情,但我注意到分布在半 1 和半 0 处强烈达到峰值,这对我正在做的事情没有好处:

a = randint(1, sizeOfVector, [0 1]);

unifrnd function 看起来很有希望满足我的需求,但我无法理解如何输出该大小的二进制向量。

我是否可以使用unifrnd 函数(如果可以的话,将如何感激!)或者有没有其他更方便的方法来获得这样一组向量?

任何帮助表示赞赏!

注意 1:只是为了确定 - 这是要求的实际内容:

随机选择 N 个给定大小的向量 均匀分布在 [0;1] 上

注意 2:我正在为元胞自动机生成初始配置,这就是为什么我只能有二进制值 [0;1]。

【问题讨论】:

  • 您确定[0; 1] 不是指0 到1 之间所有实数的区间 吗?
  • 另外,如果你从集合{0, 1} 中统一绘制n 数字,可以预期其中大约一半是0,一半是1。这就是统一的想法毕竟分布。
  • 我确定 - 我正在为元胞自动机生成初始配置,并且只有 2 个状态:ON/OFF [0, 1]
  • @Thomas 很有趣,所以你是说我已经有了统一分布?

标签: matlab binary


【解决方案1】:

使用 {0, 1} 中的元素生成 1 个随机向量:

unidrnd(2,sizeOfVector,1)-1

其他变种类似。

【讨论】:

  • +1 - 谢谢!似乎可行 - 但我在解释表达式时遇到了麻烦,您能否扩展并解释您提出的内容与我目前拥有的内容之间的区别?
  • @John: unidrnd = 离散均匀随机数。 unidrnd(N,m,n) 生成一个 m*n 矩阵,其随机数在 {1,2,...,N} 范围内。 -1 是将结果放回 {0,1,...,N-1}。见mathworks.com/access/helpdesk/help/toolbox/stats/unidrnd.html
  • 好吧 tnx 很多,这解释了 unidrnd 的使用 - 仍然试图了解它与我所拥有的有何不同。
  • 只是为了澄清我之前的评论 - 使用 randint(1, 5, [0 1]) 和 unidrnd(2,1,5)-1 有什么区别?
  • @John:我不知道在 MATLAB 上,但在 Octave 3.0.3 上只有 unidrnd 存在,randint/randi 不存在。
【解决方案2】:

如果你想得到均匀分布的 0 和 1,你想使用randi。但是,根据要求,我认为向量可以具有实值,您可以使用rand

%# create a such that each row contains a vector

a = randi(1,N,sizeOfVector); %# for uniformly distributed 0's and 1's

%# if you want, say, 60% 1's and 40% 0's, use rand and threshold
a = rand(N,sizeOfVector) > 0.4; %# maybe you need to call double(a) if you don't want logical output

%# if you want a random number of 1's and 0's, use
a = rand(N,sizeOfVector) > rand(1);

【讨论】:

  • 谢谢,但我只能有问题中解释的 0 或 1 - randi 与 randint 不一样吗?唯一的区别是我认为不推荐使用 randint :)
  • 哦,我明白了。是的,randi 是 randint 的“现代”版本。另外,是的,均匀分布意味着以相同的频率选择所有可能的值。
猜你喜欢
  • 2011-07-16
  • 1970-01-01
  • 2019-02-21
  • 2012-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-04
相关资源
最近更新 更多