Python 如何使用numpy.random.rand()在[-1,1]范围内生成随机浮点?

Python 如何使用numpy.random.rand()在[-1,1]范围内生成随机浮点?,python,numpy,random,Python,Numpy,Random,Numpy的random.rand()函数生成0到1之间的随机浮点。如何转换此函数的输出以生成-1和1之间的随机浮点 电流输出: In[]: numpy.random.rand(3, 2) Out[]: array([[0.13568674, 0.72465483], [0.48726461, 0.68867378], [0.50463821, 0.28619853]]) 期望(示例)输出: 我不想使用random.uniform()。您基本上需要将通常由np.r

Numpy的random.rand()函数生成0到1之间的随机浮点。如何转换此函数的输出以生成-1和1之间的随机浮点

电流输出:

In[]: numpy.random.rand(3, 2)
Out[]: 
array([[0.13568674, 0.72465483],
       [0.48726461, 0.68867378],
       [0.50463821, 0.28619853]])
期望(示例)输出:


我不想使用random.uniform()。

您基本上需要将通常由
np.random.rand()
生成的
(0,1)
范围缩放并移动到
(-1,1)
目标范围:

import numpy as np

N = 10
max_val, min_val = 1, -1
range_size = (max_val - min_val)  # 2
np.random.rand(N) * range_size + min_val
或其他等效代数


或者,您可以使用
np.random.randint()
生成一个
int
范围,该范围将被其大小除以(一小部分)

对于您的特定范围,这将如下所示:

import numpy as np


N = 10
L = 100
np.random.randint(-L, L, N) / L
这将比
np.random.random()
方法(稍微)慢,但可以控制结果的“密度”



(已编辑:明确写入代数和目标范围之间的关系)

如果要在两个值
a
b
之间生成一个随机浮点,其中
a
,则按如下操作。这相当于将
[0,1]
之间的随机分布重新分配或重新缩放到所需的间隔
[a,b]
(相当于拉伸或压缩,取决于
(b-a)
是否为
(1-0)

将numpy导入为np
#就你而言:
a、 b=-1,1
(b-a)*np.random.rand()+a

(numpy.random.rand(3,2)-0.5)*2
不使用np.random.uniform
的原因是什么?这是一个奇怪的限制;您是否有很好的理由避免它,以及是否有其他类似的限制?您似乎在一组不寻常的限制下运行,了解这些限制是什么很有用。第二个选项将创建一个更分层或分块的r随机抽样,因为现在只有
200/10=20
可能的值。这提供了对密度的控制。然而,这可能适用于也可能不适用于特定的用例。最好的方法可能是应用
np.random.rand
,然后在必要时使用某种形式的装箱。但是,这两种方法都可以适用于f在某些情况下进行抽样。如果有人盲目地采用统一随机抽样,我建议使用第一种方法。这是正确的,与.Quote:
(…)中提供的说明相同。要对统一[a,b]进行抽样,b>a将随机抽样的输出乘以(b-a)并加上a.(…)
import numpy as np


N = 10
L = 100
np.random.randint(-L, L, N) / L