当前位置: 首页 > 知识库问答 >
问题:

在Julia中获取[-1,1]中的随机浮点值

胡翔
2023-03-14

p = rand(-1.:eps():1., 100000)

在[-1,1]中获取随机Float值的好方法?

一个常见的建议似乎是2.*兰特(100000)-1 相反,但是(a)这永远不会返回1,因为rand的范围是[0,1),(b)这跳过了很多值:为了参数的缘故,假设eps()==0.1,然后rand从(0.1,0.2,0.3,…,0.9)返回,在这个计算之后,您将从(-0.8,-0.6,-0.4,…,0.8)得到结果,因此结果在该范围内不再是均匀随机的。

(注:就性能而言,我在顶部的版本似乎比后一个慢4倍。)

在给定范围内获得统一随机浮点数的一般推荐方法是什么?


共有1个答案

井洲
2023-03-14

使用Distributions.jl包在(-1,1)之间创建一个统一分布,并使用rand对其进行采样。

julia> using Distributions

julia> rand(Uniform(-1, 1), 10000)
10000-element Vector{Float64}:
  0.2497721424626267
  ...
 -0.27818099962886844

如果您不需要向量,只需要一个标量数,您可以这样称呼它(感谢@DNF指出这一点):

julia> rand(Uniform(-1,1))
-0.02748614119728021

您还可以对不同形状的矩阵/向量进行采样:

julia> rand(Uniform(-1, 1), 3, 3)
3×3 Matrix{Float64}:
 -0.290787  -0.521785    0.255328
  0.621928  -0.775802   -0.0569048
  0.987687   0.0298955  -0.100009

查看分发文档。这里是jl。

 类似资料:
  • 我正在寻找Java的的Python等价物。 我找到了这个python:获取和操纵(作为整数)浮点的位模式,但是有没有人知道一种不那么复杂的方法呢?

  • 我试图得到一个6 x 6数组,它包含0到0.20之间的浮点值。 我查看了Sci-Py文档,看起来我可以在统一的分布中实现这一点,但它仅在0和1之间(据我所知),而且大多数其他“随机”函数要么只有整数函数,要么只有0和1。 当我阅读时,我可能错过了一些东西,但我只是想知道是否有人知道一个numpy函数,它可以满足0到0.20之间的随机浮点数(或任何其他不仅仅是1的自定义浮点数),这不是正态分布。 同

  • 问题内容: 好的,我在代码中实现了这个SO问题:随机返回True或False 但是,我的行为很奇怪:我需要同时运行十个实例,每个实例每次运行仅返回一次true或false。令人惊讶的是,无论我做什么,每次我得到 有什么方法可以改善这种方法,以便我至少有大约50%的机会得到吗? 为了使它更易于理解:我将应用程序构建为JAR文件,然后通过批处理命令运行 程序的内容-使其尽可能简单: 如果我打开10个命

  • 问题内容: 我正在寻找最好的方法(快速而优雅)来获取python中的随机布尔值(翻转硬币)。 目前,我正在使用或。 有我不知道的更好的选择吗? 问题答案: 亚当的答案相当快,但是我发现答案要快得多。如果您真的想要布尔值而不是long值,那么 仍然是两倍的速度 两种解决方案都需要 如果最大的速度不是优先考虑的话,那么阅读肯定会更好 在看到@Pavel的答案后添加了此内容

  • 标准< code>rand()函数给出的数字对我来说不够大:我需要< code>unsigned long long的数字。我们如何得到非常大的随机数?我试着修改一个简单的散列函数,但是它太大,运行时间太长,而且从来不会产生小于1e5的数字!!

  • 我在学习如何使用java 8流时,发现了一些奇怪的事情。 <代码>数组。stream()具有除浮点数组之外的所有方法: <代码>数组。流(int[]):int流 同样,有int、双精度等的Stream实现,但没有浮点数: 有什么原因吗? 使用浮动流的推荐方法是什么?