【问题标题】:Random generator function in PythonPython中的随机生成器函数
【发布时间】:2013-11-21 00:24:22
【问题描述】:

我从 9 月开始学习 Java,但一位教授给我分配了一个科学课程的作业,用 Python 创建一个程序,该程序将使用最大值和最小值以及该球体内的 15 个随机点生成随机直径(x, y, z)。

我需要制作一个随机数生成器,它生成一个介于 0.0 和 1.0 之间的数字,以便我可以将其插入我的公式中以找到一个随机直径。如果随机数为RN,则为:[(RN*(max-min))+min]

一开始我用的是这个随机函数:

from random import*
RN=random():

问题是,这个随机函数是 [0.0, 1.0)。换句话说,它不包括 1.0。 如何创建包含 1.0 的函数?

另外,如果你不介意,你能帮我找到 y 和 z 坐标吗?我知道如何找到 x。

y 值的公式是 y=+ 或 - sqrt(r^2-x^2)(也是随机生成的)。 我会得到 x 值,它是随机函数 [0.0-1.0] 的结果,半径是我直径的一半。我是 Python 的初学者,如何初始化我的 x 和 y 并将上面的公式放入?

z的公式类似,z=+或-sqrt(-x^2-y^2+r^2)(也是随机生成的)

这些是使用圆的公式: 半径:r=sqrt(x^2+y^2) 球体:r=sqrt(x^2+y^2+z^2)

如果您能回答我的问题的任何部分,我将非常感激,非常感谢您抽出宝贵时间阅读本文! **顺便说一句,我正在使用嗨!自 9 月以来我一直在学习 Java,但一位教授给我分配了一个科学课程的作业,用 Python 创建一个程序,该程序将使用最大值和最小值生成随机直径,以及该球体内的 15 个随机点(x, y, z)。

我需要制作一个随机数生成器,它生成一个介于 0.0 和 1.0 之间的数字,以便我可以将其插入我的公式中以找到一个随机直径。如果随机数为RN,则为:[(RN*(max-min))+min]

一开始我用的是这个随机函数:

随机导入* RN=随机():

问题是,这个随机函数是 [0.0, 1.0)。换句话说,它不包括 1.0。 如何创建包含 1.0 的函数?

另外,如果你不介意,你能帮我找到 y 和 z 坐标吗?我知道如何找到 x。

y 值的公式是 y=+ 或 - sqrt(r^2-x^2)(也是随机生成的)。 我会得到 x 值,它是随机函数 [0.0-1.0] 的结果,半径是我直径的一半。我是 Python 的初学者,如何初始化我的 x 和 y 并将上面的公式放入?

z的公式类似,z=+或-sqrt(-x^2-y^2+r^2)(也是随机生成的)

这些是使用圆的公式: 半径:r=sqrt(x^2+y^2) 球体:r=sqrt(x^2+y^2+z^2)

如果您能回答我的任何问题,我将不胜感激,非常感谢您抽出宝贵时间阅读本文!!!

**顺便说一句,我用的是python x,y spyder!

【问题讨论】:

    标签: python random command spyder pythonxy


    【解决方案1】:

    random.uniform 会给你一个在给定最小值和最大值之间均匀分布的随机数。

    只需生成随机点并检查它们是否在球体内。如果不是,请丢弃它们并重试。

    import math
    import random
    
    def generate_points(n_points, min_diameter=0, max_diameter=1):
        diameter = random.uniform(min_diameter, max_diameter)
        radius = diameter / 2
        count = 0
        while count < n_points:
            x, y, z = [random.uniform(-radius, radius) for _ in range(3)]
            distance = math.sqrt(x * x + y * y + z * z)
            if distance <= radius:
                yield (x, y, z)
                count += 1
    
    for x, y, z in generate_points(10):
        print x, y, z
    

    注意:这可能会影响生成的点数。 (我不确定,实际上可能没问题。)另一种方法可能是使用极坐标,选择两个随机角度和一个随机半径(从中心偏移)。

    这是该方法的数学公式:

    theta = random.uniform(0, 2 * math.pi)
    phi = random.uniform(-math.pi / 2, math.pi / 2)
    x = r * cos(theta) * cos(phi)
    y = r * sin(phi)
    z = r * sin(theta) * cos(phi)
    

    有关分发的更多信息,请参见此处:

    https://math.stackexchange.com/questions/87230/picking-random-points-in-the-volume-of-sphere-with-uniform-probability

    http://mathworld.wolfram.com/SpherePointPicking.html(这个是关于球体表面的点,所以可能没那么有用)

    【讨论】:

      【解决方案2】:

      我将它用于随机生成器,它可以工作,我不确定它是否是您正在寻找的正确的,但我希望它对您有所帮助

      import random
      
      maths_operator_list=['+','-','*']
      maths_operator = random.choice(maths_operator_list)
      number_one = random.randint(0,20)
      number_two = random.randint(0,20)
      correct_answer = 0
      
      print(str(number_one), str(maths_operator), number_two)
      
      if maths_operator == '+':
          correct_answer = number_one + number_two
      elif maths_operator == '-':
          correct_answer = number_one - number_two
      elif maths_operator == '*':
          correct_answer = number_one * number_two
      
      print(correct_answer)
      

      【讨论】:

        【解决方案3】:

        您可以使用random.range

        random.randrange(-15,15,.1)
        

        这将找到一个介于 -15 和 15 之间且能被 0.1 整除的数字。

        【讨论】:

        • random.randrange 只能有整数参数。更好的方法(在我看来)是random.randrange(-150, 150, 1)/10
        【解决方案4】:

        作为随机数生成器的答案:

        RN = random.uniform(a, b)
        

        返回一个随机整数 N,使得 a

        关于如何初始化 x 和 y,当你设置 y = 时,y 会被初始化,它会自动初始化。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-03-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-07-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多