Функция генератора случайных чисел в Python

Я изучаю Java с сентября, но профессор дал мне задание для научного курса создать программу на Python, которая будет генерировать случайный диаметр, используя максимальное и минимальное значение, и 15 случайных точек в этой сфере (x, у, з).

Мне нужно создать генератор случайных чисел, который генерирует число от 0,0 до 1,0, чтобы я мог подключить его к своей формуле, чтобы найти случайный диаметр. Если случайное число равно RN, оно будет следующим: [(RN*(max-min))+min]

Сначала я использовал эту случайную функцию:

from random import*
RN=random():

Проблема в том, что эта случайная функция равна [0,0, 1,0). Другими словами, он не включает 1.0. Как я могу создать функцию, включающую 1.0?

Кроме того, если вы не возражаете, не могли бы вы помочь мне найти координаты y и z? Я знаю, как найти х.

Формула для значения 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)

Я был бы невероятно благодарен, если бы вы могли ответить на любую часть моего вопроса, большое спасибо, что нашли время, чтобы прочитать это!! **кстати, я использую привет! Я изучаю Java с сентября, но профессор дал мне задание для научного курса создать программу на Python, которая будет генерировать случайный диаметр, используя максимальное и минимальное значение, и 15 случайных точек в этой сфере (x, у, з).

Мне нужно создать генератор случайных чисел, который генерирует число от 0,0 до 1,0, чтобы я мог подключить его к своей формуле, чтобы найти случайный диаметр. Если случайное число равно RN, оно будет следующим: [(RN*(max-min))+min]

Сначала я использовал эту случайную функцию:

из случайного импорта* RN=random():

Проблема в том, что эта случайная функция равна [0,0, 1,0). Другими словами, он не включает 1.0. Как я могу создать функцию, включающую 1.0?

Кроме того, если вы не возражаете, не могли бы вы помочь мне найти координаты y и z? Я знаю, как найти х.

Формула для значения 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!


person airgold    schedule 21.11.2013    source источник


Ответы (4)


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 (это касается точек на поверхность сферы, так что может быть не так полезно)

person FogleBird    schedule 21.11.2013

Я использовал это для генератора случайных чисел, и он работает, я не уверен, что это тот, который вы ищете, но я надеюсь, что это поможет

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)
person Thomas Kilvert    schedule 08.06.2016

Вы можете использовать random.range

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

Это найдет число от -15 до 15, которое делится на 0,1.

person AHuman    schedule 21.11.2013
comment
random.randrange может иметь только целочисленные аргументы. Лучший способ сделать это (на мой взгляд) random.randrange(-150, 150, 1)/10. - person Rushy Panchal; 21.11.2013

Как ответ генератору случайных чисел:

RN = random.uniform(a, b)

Возвращает случайное целое число N такое, что a ‹= N ‹= b.

Что касается того, как инициировать x и y, y будет инициализирован, когда вы установите y = чему-то, он делает это автоматически.

person Razzad777    schedule 21.11.2013