python产生多个随机数_在python中生成1000000多个随机数的最快方法

你可以通过做你最初描述的事情(生成一堆随机数,并相应地进行乘法和除法)来加快事情的进度。。。

另外,您可能已经知道这一点,但是在使用大型ish numpy数组时,请确保在适当的位置执行操作(*=,/=,+=,等等)。对于大型数组来说,它在内存使用上有着巨大的不同,并且也会给速度带来相当大的提高。In [53]: def rand_row_doubles(row_limits, num):

....: ncols = len(row_limits)

....: x = np.random.random((num, ncols))

....: x *= row_limits

....: return x

....:

In [59]: %timeit rand_row_doubles(np.arange(7) + 1, 1000000)

10 loops, best of 3: 187 ms per loop

相比之下:In [66]: %timeit ManyRandDoubles(np.arange(7) + 1, 1000000)

1 loops, best of 3: 222 ms per loop

这没什么大的区别,但如果你真的担心速度,那是有问题的。

为了证明这是正确的:In [68]: x.max(0)

Out[68]:

array([ 0.99999991, 1.99999971, 2.99999737, 3.99999569, 4.99999836,

5.99999114, 6.99999738])

In [69]: x.min(0)

Out[69]:

array([ 4.02099599e-07, 4.41729377e-07, 4.33480302e-08,

7.43497138e-06, 1.28446819e-05, 4.27614385e-07,

1.34106753e-05])

同样,对于“行和为一”的部分。。。In [70]: def rand_rows_sum_to_one(nrows, ncols):

....: x = np.random.random((ncols, nrows))

....: y = x.sum(axis=0)

....: x /= y

....: return x.T

....:

In [71]: %timeit rand_rows_sum_to_one(1000000, 13)

1 loops, best of 3: 455 ms per loop

In [72]: x = rand_rows_sum_to_one(1000000, 13)

In [73]: x.sum(axis=1)

Out[73]: array([ 1., 1., 1., ..., 1., 1., 1.])

老实说,即使你在C语言中实现了一些东西,我也不确定你能否在这一点上击败numpy。。。不过,我可能会大错特错!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值