Python随机生成均匀分布在单位圆内的点代码示例

生成均匀分布在单位圆内的点是一道常见的算法题,下面是示例代码和详细攻略。

生成均匀分布在单位圆内的点

要生成均匀分布在单位圆内的点,可以使用下面的方法。

  1. 先生成均匀分布在正方形区域内的点。

  2. 然后筛选出在单位圆内的点。

步骤1可以通过调用Python自带的random模块实现,以平面直角坐标系为例,代码如下:

import random

def generate_points(n):
    """生成n个均匀分布在正方形区域内的点"""
    points = []
    for i in range(n):
        x = random.uniform(-1, 1)
        y = random.uniform(-1, 1)
        points.append((x, y))
    return points

上述代码中,random.uniform(a, b)函数用于生成a到b之间的均匀分布的随机数。通过调用该函数生成点的x、y坐标,将其作为元组(x, y)加入到列表中,最终返回生成的点列表。

步骤2可以通过判断点是否在单位圆内实现,圆心为坐标系原点,半径为1。如果点$(x,y)$在单位圆内,则满足$x^2+y^2\le1$,代码如下:

def filter_points(points):
    """筛选出在单位圆内的点"""
    filtered_points = []
    for x, y in points:
        if x ** 2 + y ** 2 <= 1:
            filtered_points.append((x, y))
    return filtered_points

上述代码中,points为步骤1生成的所有点的列表,filtered_points为筛选后的在单位圆内的点的列表。如果点满足$x^2+y^2\le1$这个条件,则将其加入到filtered_points列表中。

至此,我们就完成了生成均匀分布在单位圆内的点,完整代码如下:

import random

def generate_points(n):
    """生成n个均匀分布在正方形区域内的点"""
    points = []
    for i in range(n):
        x = random.uniform(-1, 1)
        y = random.uniform(-1, 1)
        points.append((x, y))
    return points

def filter_points(points):
    """筛选出在单位圆内的点"""
    filtered_points = []
    for x, y in points:
        if x ** 2 + y ** 2 <= 1:
            filtered_points.append((x, y))
    return filtered_points

n = 1000  # 生成1000个点
points = generate_points(n)
filtered_points = filter_points(points)

print(f"生成的点数:{len(points)}")
print(f"筛选后的点数:{len(filtered_points)}")

输出结果为:

生成的点数:1000
筛选后的点数:791

可以看到,生成的点数为1000,经过筛选后在单位圆内的点数为791,接近于理论上的分布数量,从而实现了随机生成均匀分布在单位圆内的点。

示例说明

示例1

若要生成1万个均匀分布在单位圆内的点,可以设置n = 10000,再按照上述方法得到结果。

import random

def generate_points(n):
    """生成n个均匀分布在正方形区域内的点"""
    points = []
    for i in range(n):
        x = random.uniform(-1, 1)
        y = random.uniform(-1, 1)
        points.append((x, y))
    return points

def filter_points(points):
    """筛选出在单位圆内的点"""
    filtered_points = []
    for x, y in points:
        if x ** 2 + y ** 2 <= 1:
            filtered_points.append((x, y))
    return filtered_points

n = 10000  # 生成10000个点
points = generate_points(n)
filtered_points = filter_points(points)

print(f"生成的点数:{len(points)}")
print(f"筛选后的点数:{len(filtered_points)}")

输出结果为:

生成的点数:10000
筛选后的点数:7878

可以看到,生成的点数为10000,筛选后在单位圆内的点数为7878,接近于理论上的分布数量,从而实现了随机生成均匀分布在单位圆内的1万个点。

示例2

若要生成均匀分布在单位球面内的100个点,可以在步骤1中生成均匀分布在正方体区域内的点,然后在步骤2中筛选出在单位球面内的点。

首先生成均匀分布在正方体区域内的代码如下:

import random

def generate_points(n):
    """生成n个均匀分布在正方体区域内的点"""
    points = []
    for i in range(n):
        x = random.uniform(-1, 1)
        y = random.uniform(-1, 1)
        z = random.uniform(-1, 1)
        points.append((x, y, z))
    return points

生成的点中,概率不再均匀分布,因此可以使用接下来的算法实现筛选。

其次筛选出在单位球面内的点,代码如下:

import math

def filter_points(points):
    """筛选出在单位球面内的点"""
    filtered_points = []
    for x, y, z in points:
        if x ** 2 + y ** 2 + z ** 2 <= 1:
            filtered_points.append((x, y, z))
    return filtered_points

上述代码中,x ** 2 + y ** 2 + z ** 2 <= 1表示点$(x,y,z)$距离坐标系原点的距离小于等于1,从而满足在单位球面内的条件。

将两段代码组合得到完整代码:

import random
import math

def generate_points(n):
    """生成n个均匀分布在正方体区域内的点"""
    points = []
    for i in range(n):
        x = random.uniform(-1, 1)
        y = random.uniform(-1, 1)
        z = random.uniform(-1, 1)
        points.append((x, y, z))
    return points

def filter_points(points):
    """筛选出在单位球面内的点"""
    filtered_points = []
    for x, y, z in points:
        if x ** 2 + y ** 2 + z ** 2 <= 1:
            filtered_points.append((x, y, z))
    return filtered_points

n = 100  # 生成100个点
points = generate_points(n)
filtered_points = filter_points(points)

print(f"生成的点数:{len(points)}")
print(f"筛选后的点数:{len(filtered_points)}")

输出结果为:

生成的点数:100
筛选后的点数:66

可以看到,生成的点数为100,筛选后在单位球面内的点数为66,接近于理论上的分布数量,从而实现了随机生成均匀分布在单位球面内的100个点。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python随机生成均匀分布在单位圆内的点代码示例 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • python批量添加zabbix Screens的两个脚本分享

    下面是详细的攻略: 安装前准备 在使用这两个Python脚本前,需要在本地安装pyzabbix模块。pyzabbix是一个第三方Python模块,提供了对Zabbix API的支持,可以帮助我们快速地访问Zabbix API。 可以通过pip在命令行安装pyzabbix模块: pip install pyzabbix 第一个脚本 – zabbix_scree…

    python 2023年6月3日
    00
  • Python如何识别银行卡卡号?

    当我们需要对银行卡号进行验证处理时,我们需要先对银行卡号的格式进行校验,然后再进行一些其他的处理,比如通过银行卡号查询银行名称、所属地区等相关信息。 那么具体来说,Python如何识别银行卡卡号呢?以下是一个完整的实例教程: 1. 安装 PyPI 中的银行卡号校验库 PyPI中有很多可以用于银行卡号校验的库,比如 bankcardvalidator,我们首先…

    python 2023年5月13日
    00
  • Python中的异常类型及处理方式示例详解

    Python中的异常类型及处理方式示例详解 Python作为一门高级编程语言,提供了强大的异常处理机制,能够在程序执行中发生错误时,及时捕获并处理异常,使程序更加健壮。 在Python中,异常类型有很多种,每个异常类型会对应着一种错误情况。下面列举了常见的异常类型及其含义: AttributeError: 属性错误,当访问对象属性不存在时出现该异常。 Nam…

    python 2023年5月13日
    00
  • Python实现数值积分方式

    下面是Python实现数值积分的详细攻略: 简介 数值积分是求解函数定积分值的一种方法,通过数值方法对函数进行逼近解析,然后计算逼近解析的函数在给定区间上的面积或体积,最后得到函数在该区间上的定积分值。常见的数值积分方法包括梯形法、辛普森法和龙格-库塔法等。 Python提供了丰富的数值积分函数,其中scipy.integrate模块和sympy.integ…

    python 2023年6月3日
    00
  • 在Python文件中指定Python解释器的方法

    在Python文件中指定Python解释器是通过在文件的第一行添加一个特定的注释行来实现的。这个注释行称为 shebang 或者 hashbang。它告诉操作系统哪个解释器用于运行脚本。下面是详细的攻略: 确认你用的是正确的Python解释器。同一台机器上可能安装了多个版本的Python解释器,所以必须确认使用正确版本的Python解释器。可以通过在命令行输…

    python 2023年5月30日
    00
  • Python格式化输出–%s,%d,%f的代码解析

    Python格式化输出是Python中常用的输出方式之一,可以将输出内容按照指定格式进行输出。其中,常用的格式化输出符包括%s、%d、%f等。 %s格式输出字符串数据类型,例如: name = "John" print("My name is %s" % name) 输出结果为: My name is John %d用…

    python 2023年6月5日
    00
  • Python 可视化神器Plotly详解

    Python 可视化神器Plotly详解 简介 Plotly 是一个开源的可视化工具,支持许多语言,包括Python、R和MATLAB等,并且支持在线编辑和分享图表。因此,Plotly 是一个非常流行的可视化神器,被广泛应用于数据分析与可视化领域。本篇文章将详细讲解 Plotly 的使用方法,以及使用示例。 安装 在使用 Plotly 之前,需要先安装相关依…

    python 2023年5月19日
    00
  • 解决Python发送Http请求时,中文乱码的问题

    解决Python发送Http请求时中文乱码的问题 在Python中,我们经常需要发送HTTP请求。但是,当我们发送包含中文的HTTP请求时,可能会遇到中文乱码的问题。本文将介绍如何解决Python发送HTTP请求时中文乱码的问题,并提供两个示例代码。 方法1:使用urlencode方法编码中文参数 在Python中,我们可以使用urlencode方法将中文参…

    python 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部