Python 如何使用Numpy在5.0和9.0之间以0.5的步长随机获得3个浮点数?
如何使用Numpy在5.0和9.0之间以0.5的步长随机获得3个浮点数 我做了如下尝试:Python 如何使用Numpy在5.0和9.0之间以0.5的步长随机获得3个浮点数?,python,numpy,Python,Numpy,如何使用Numpy在5.0和9.0之间以0.5的步长随机获得3个浮点数 我做了如下尝试: np.random.uniform(5.0,9.0) ans = [5.5, 6.0, 8.5] 但它不包括“步骤”参数 编辑: Python random.range提供了使用“步骤”的方法。但它只适用于整数 random.randrange(start, stop[, step]) 我想得到3个这样的数字: 预期结果如下: np.random.uniform(5.0,9.0) ans = [
np.random.uniform(5.0,9.0)
ans = [5.5, 6.0, 8.5]
但它不包括“步骤”参数
编辑:
Python random.range提供了使用“步骤”的方法。但它只适用于整数
random.randrange(start, stop[, step])
我想得到3个这样的数字:
预期结果如下:
np.random.uniform(5.0,9.0)
ans = [5.5, 6.0, 8.5]
这应该做到:
0.5 * floor(2.0 * np.random.uniform(5.0, 9.0))
希望这对你有帮助。把
val = np.random.randint(2*5,2*9)/2.
randint返回一个范围为[10,18]的均匀分布整数,然后进行浮点除以2。这样做的好处是速度相当快:
In [120]: %timeit np.random.randint(2*5,2*9)/2.
1000000 loops, best of 3: 329 ns per loop
In [121]: %timeit 0.5 * ceil(2.0 * np.random.uniform(5.0, 9.0))
100000 loops, best of 3: 4.61 µs per loop
要使其更通用,请执行以下操作:
def rand_with_step(low,high,step,count=1,bias=False):
n = 1/step
if count > 1:
val = np.random.randint(low*n,high*n,count)*step
else:
val= np.random.randint(low*n,high*n)*step
if bias:
bias = ceil(low/step)*step - low
else:
bias = 0
return val - bias
这里,偏置标志确定是否从低值开始计算步长
例如:
In [190]: rand_with_step(5,9,0.11,1,True)
Out[190]: 7.31
这应该是正确的,因为7.31-5/0.11=29 a阶跃的整数倍
值得注意的是,这种方法比np.random.choice更快,即使有一个预先计算的数字池可以从中提取,尽管我不清楚为什么
In [343]: x = np.arange(5, 9, 0.5)
In [344]: %timeit np.random.choice(x,size=3)
10000 loops, best of 3: 29.7 µs per loop
In [345]: %timeit rand_with_step(5,9,0.5,3,True)
10000 loops, best of 3: 25.3 µs per loop
我可能会使用类似@ebarr的答案,但这里有一个替代方案 使用np.arange创建所需范围,然后使用np.random.choice从该数组中选择: 请注意,如果像这样使用arange,可能的输出中不包括9。如果要包括上限,可以使用np.arange5、9.25、0.5,或者更一般地使用np.arangestart、stop+0.5*步骤、步骤 如果所需的范围很大,而您只选择了几个值,则这不是非常有效。如果您要从同一组数字中重复选择,则可以定义一次可能的值并重用该变量:
In [135]: values = np.arange(5, 9, 0.5)
In [136]: np.random.choice(values, size=3)
Out[136]: array([ 6.5, 5. , 6. ])
In [137]: np.random.choice(values, size=5)
Out[137]: array([ 6. , 8. , 6. , 7.5, 8. ])
作者必须解释在这种情况下他们所说的“步骤”是什么意思。?用粗体字不能解释。很明显,您希望“步骤”为0.5;但不清楚“步骤”是什么。您的意思是希望返回的唯一值为5.0、5.5、6.0、…、9.0?