Как я могу быстро сгенерировать (большой) список случайных чисел, учитывая список начальных чисел в качестве входных данPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу быстро сгенерировать (большой) список случайных чисел, учитывая список начальных чисел в качестве входных дан

Сообщение Anonymous »

Мне нужно создать функцию, которая принимает массив целых чисел и возвращает список случайных чисел той же длины, что и массив. Однако существует ограничение: выходное случайное число, соответствующее данной записи во входном массиве, всегда должно быть одинаковым в зависимости от этой записи.
Например, если input_a приведенный ниже возвращает следующее:

Код: Выделить всё

> input_a = np.array([1, 2, 3, 4, 5])
> random_array(input_a)
[0.51689016 0.62747792 0.16585436 0.63928942 0.30514275]
Тогда input_b, указанный ниже, должен вернуть следующее:

Код: Выделить всё

> input_b = np.array([3, 2, 3])
> random_array(input_b)
[0.16585436 0.62747792 0.16585436]
Обратите внимание, что выходные числа, соответствующие входному значению 3, одинаковы, как и те, которые соответствуют входному значению 2. По сути, значения входного массива равны используется в качестве начального числа для выходного массива.
Основная проблема заключается в том, что входные массивы могут быть очень большими, поэтому мне нужно что-то, что может эффективно выполнять эту операцию.Моя наивная реализация заключается в следующем: я создаю список генераторов случайных чисел с входным массивом в качестве начального числа.

Код: Выделить всё

import numpy as np

def random_array(input_array):
rng_list = [np.random.default_rng(seed=i) for i in input_array]
return [rng.random() for rng in rng_list]

input_a = np.array([1, 2, 3])
input_b = np.array([3, 2, 3])

print(random_array(input_a)) # [0.5118216247002567, 0.2616121342493164, 0.08564916714362436]
print(random_array(input_b)) # [0.08564916714362436, 0.2616121342493164, 0.08564916714362436]
Он работает так, как задумано, но ужасно медленно для того, что мне нужно, что неудивительно, учитывая, что он выполняет цикл над записями массива. Эта реализация занимает около 5 секунд для работы с входным массивом длиной 100 000, и мне нужно будет сделать это для гораздо больших входных данных.
Как я могу это сделать, но не только эффективно?

Подробнее здесь: https://stackoverflow.com/questions/790 ... st-of-seed
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»