美文网首页生活不易 我用python
Python使用NumPy计算圆周率(蒙特卡洛)

Python使用NumPy计算圆周率(蒙特卡洛)

作者: 仿佛兮 | 来源:发表于2019-12-02 12:44 被阅读0次

    Python教学书籍和视频中经常出现Python蒙特卡洛法计算圆周率,原理就是随机向正方形中投掷一定数量的点。落在正方形内扇形中的点的数量与总点数的比值即Π/4,进而求出Π的近似值。如下图:

    pi2.png

    最近在学NumPy时突然想到是否可以用NumPy来计算圆周率近似值,于是在网上搜索一番,只找到一篇关于NumPy计算圆周率的文章。点进去居然不能看,需要办VIP才能看。我瞬间被某网站敝帚自珍的精神感动到,于是决定自己写一篇可以免费看的。下面是代码:

    import numpy as np
    import time
    
    start = time.perf_counter()
    
    # 投掷点数总和
    DART = 2**27
    
    # 落在圆内的点数
    hits = 0
    
    # 使用numpy的随机函数生成2行DART列的矩阵: points, 代表投掷DART次点的坐标,
    # 第0行代表x轴坐标,第1行代表y轴坐标。
    points = np.random.rand(2, DART)
    
    # 对矩阵计算,代替循环。
    hits = np.sum(np.where(((points[0]**2 + points[1]**2)**0.5) < 1, 1, 0))
    
    # 求得pi的值
    pi = 4 * hits / DART
    
    end = time.perf_counter()
    
    # 求得计算所用的时间
    ttime = end - start
    
    print("PI is: {}".format(pi))
    
    print("Total time is: {:.5f}s".format(ttime))
    

    相关文章

      网友评论

        本文标题:Python使用NumPy计算圆周率(蒙特卡洛)

        本文链接:https://www.haomeiwen.com/subject/mcgxgctx.html