Как генерировать образцы данных (1 <x1^2 + x2^2 <2) в python

Привет, я хочу сгенерировать 100 случайных выборочных данных для x1 и x2 с библиотекой numpy, которые удовлетворяют приведенным ниже условиям. ( 1 < х1 ^ 2 + х2 ^ 2 < 2 )

Что ты уже испробовал?

Mr. Polywhirl 20.02.2023 20:37

Угол, очевидно, одинаков между 0 и 2π. Что касается распределения радиуса, вы должны использовать Метод обратного преобразования . См., например, этот ТАК ответ об очень похожей проблеме.

jpmarinier 20.02.2023 20:56
Библиотека для работы с мороженым
Библиотека для работы с мороженым
Лично я попрощался с операторами print() в python. Без шуток.
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Привет, люди RPA, это снова я и я несу подарки! В очередном моем приключении о том, как создавать ботов для облегчения рутины. Вот, думаю, стоит...
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
Учебник по веб-скрапингу
Учебник по веб-скрапингу
Привет, ребята... В этот раз мы поговорим о веб-скрейпинге. Целью этого обсуждения будет узнать и понять, что такое веб-скрейпинг, а также узнать, как...
Тонкая настройка GPT-3 с помощью Anaconda
Тонкая настройка GPT-3 с помощью Anaconda
Зарегистрируйте аккаунт Open ai, а затем получите ключ API ниже.
Learning Data Analytics Two: Filtering data in a DataFrame.
Learning Data Analytics Two: Filtering data in a DataFrame.
В Learning Data Analytics One: Using Python and Pandas , я рассказываю о:
2
2
52
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

import numpy as np

# Define the number of samples you want to generate
num_samples = 100

# Define the lower and upper bounds for x1 and x2
lower_bound = -2**0.5
upper_bound = 2**0.5

# Initialize an empty array to store the generated samples
samples = np.empty((num_samples, 2))

# Generate random samples until we have num_samples that satisfy the condition
count = 0
while count < num_samples:
    # Generate a random pair of values for x1 and x2 within the bounds
    x1, x2 = np.random.uniform(lower_bound, upper_bound, 2)
    
    # Check if the condition is satisfied for the pair
    if 1 < x1**2 + x2**2 < 2:
        # If the condition is satisfied, add the pair to the array
        samples[count] = [x1, x2]
        count += 1

# Print the generated samples
print(samples)
Ответ принят как подходящий

Признайте, что вектор с компонентами x1 и x2 имеет величину sqrt(x1**2 + x2**2). Вам нужен случайный вектор с величиной от 1 до √2

Вы можете генерировать случайные векторы, нормализовать их так, чтобы их величины были равны 1, а затем умножать их на случайное число от 1 до √2.

import numpy as np

# generate 100 random 2d vectors
vecs = np.random.random((100, 2))

# normalize them to a magnitude of 1
vecs /= np.linalg.norm(vecs, axis=1, keepdims=True)

# generate 100 random magnitudes
mags = np.random.uniform(1, np.sqrt(2), (100, 1))

# multiply unit vectors by random magnitudes
vecs *= mags

# separate into components 
x1 = vecs[:, 0]
x2 = vecs[:, 1]

Наконец, давайте удостоверимся, что наше условие выполнено:

v = x1**2 + x2**2
assert ((v >= 1) & (v <= 2)).all()

Попробуйте онлайн!

Другие вопросы по теме