随机数公式⽣成⼀个负数和正数之间的数_随机⽣成1或-1(正
整数或负整数)
我想在Python中⽣成1或-1,作为在⾮负数和⾮正数之间随机化或随机更改已存在整数的符号的步骤。在Python中⽣成1或-1的最佳⽅法是什么?假设均匀分布的,我知道我可以使⽤:随机⽣成1或-1(正整数或负整数)
import random
#method1
my_number = random.choice((-1, 1))
#method2
my_number = (-1)**random.randrange(2)
#method3
# if I understand correctly random.random() should never return exactly 1
# so I use "
if random.random() < 0.5:
my_number = 1
else:
my_number = -1
#method4
my_number = random.randint(0,1)*2-1
使⽤timeit模块,我得到了以下结果:
#method1
s = "my_number = random.choice((-1, 1))"
timeit.timeit(stmt = s, setup = "import random")
>2.814896769857569
#method2
s = "my_number = (-1)**random.randrange(2)"
timeit.timeit(stmt = s, setup = "import random")
>3.521280517518562
#method3
s = """
if random.random() < 0.5: my_number = 1
else: my_number = -1"""
timeit.timeit(stmt = s, setup = "import random")
>0.25321546903273884
#method4
s = "random.randint(0,1)*2-1"
timeit.timeit(stmt = s, setup = "import random")
>4.526625442240402
如此出⼈意料⽅法3是最快的。我打赌⽅法1是最快的,因为它也是最短的。另外⽅法1(因为Python 3.6我认为?)和3给出了引⼊不均匀分布的可能性。虽然⽅法1是最短的(主要advantege)现在我会选择⽅法3:在Python
s = """
import random
def positive_or_negative():
if random.random() < 0.5:
return 1
else:
return -1
"""
timeit.timeit(stmt = "my_number = positive_or_negative()", setup = s)
python生成1到100之间随机数>0.3916183138621818
没有更好的(更快或更短)⽅法随机⽣成-1或1:
def positive_or_negative():
if random.random() < 0.5:
return 1
else:
return -1
测试?任何原因为什么你会选择⽅法1⽽不是⽅法3,反之亦然?
+2
⽅法3是最快的,因为所有其他⽅法都必须在内部执⾏类似的操作。 –
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论