c语言里rands(1),最快的方法在python中生成1,000,000多个随机数

Joe Kington..

13

你可以通过你最初描述的内容(生成一堆随机数并相应地相乘和分割)来加快mtrw上面发布的内容的速度......

此外,您可能已经知道这一点,但在使用大型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、付费专栏及课程。

余额充值