Правильный способ генерации случайных чисел в Cython?

Каков наиболее эффективный и переносимый способ генерации случайного случайного в [0,1] в Китоне? Один из подходов – использовать INT_MAX и rand() из библиотеки C:

 from libc.stdlib cimport rand cdef extern from "limits.h": int INT_MAX cdef float randnum = rand() / float(INT_MAX) 

Можно ли использовать INT_MAX таким образом? Я заметил, что он сильно отличается от константы, которую вы получаете от max int int:

 import sys print INT_MAX print sys.maxint 

выходы:

 2147483647 (C max int) 9223372036854775807 (python max int) 

Какой правильный номер «нормализации» для rand() ? EDIT дополнительно, как можно установить случайное семя (например, посеяно на основе текущего времени), если вы используете C-подход вызова rand() из libc?

3 Solutions collect form web for “Правильный способ генерации случайных чисел в Cython?”

В стандарте C указано, что rand возвращает int в диапазоне от 0 до RAND_MAX включительно, поэтому деление его на RAND_MAX (из stdlib.h ) является правильным способом его нормализации. На практике RAND_MAX почти всегда будет равен MAX_INT, но не полагайтесь на это.

Поскольку rand является частью ISO C с C89, он гарантированно будет доступен везде, но никаких гарантий относительно качества его случайных чисел не гарантируется. Если переносимость – это ваша главная проблема, это ваш лучший вариант, если вы не хотите использовать random модуль Python.

Python sys.maxint – это совсем другое понятие; это просто наибольшее положительное число, которое Python может представлять в своем собственном типе int; более крупные должны быть длинными. Python ints и longs не имеют особого отношения к C.

'c' stdlib rand () возвращает число от 0 до RAND_MAX, которое обычно равно 32767.

Есть ли причина не использовать python random ()?

Генерировать случайные целые числа от 0 до 9

Я не уверен, что drand – это новое дополнение, но, похоже, оно делает именно то, что вы хотите, избегая дорогостоящего разделения.

 cdef extern from "stdlib.h": double drand48() void srand48(long int seedval) cdef extern from "time.h": long int time(int) # srand48(time(0)) srand48(100) # TODO: this is a seed to reproduce bugs, put to line of code above for # production drand48() #This gives a float in range [0,1) 

Я наткнулся на эту идею , исследуя, сформировал ли ваш метод разделения достаточную случайность. Источник, который я нашел, делает хорошую точку зрения, что в моем случае я сравниваю случайное число с десятичной цифрой с двумя цифрами, поэтому мне действительно нужны только 3 десятичные точки точности. Поэтому INT_MAX более чем достаточно. Но, похоже, drand48 экономит затраты на деление, поэтому его стоит использовать.

  • Должен ли я использовать `random.seed` или` numpy.random.seed` для управления генерацией случайных чисел в `scikit-learn`?
  • Сделать соглашения по PRNG по всему программному обеспечению
  • Создание строки из строки и целого числа в Python
  • Python, Генерация случайной строки скобок
  • Python numpy.random.choice в C # с неравномерным распределением вероятностей
  • Numpy: Как случайное разбиение / выбор матрицы на n-различные матрицы
  • Библиотека pycrypto Python для генерации случайных чисел vs os.urandom
  • Разница между генерацией случайных чисел C ++ и Python
  • Как создать предсказуемую перетасовку последовательности без предварительного создания всей последовательности?
  • Как получить нормальное распределение в диапазоне в numpy?
  • Список Python не перемещается в цикле
  •  
    Interesting Posts for Van-Lav

    Может ли задача Python Fabric вызывать другие задачи и уважать их списки хостов?

    Родительский экземпляр не связан с сеансом; ленивая загрузка атрибута «account» не может продолжаться

    apscheduler – несколько экземпляров

    matplotlib – Легенда с несколькими осями с объектом ошибки

    Прилагаемая матрица A с матрицей B

    Добавление счетчиков удаляет ключи

    Как развязать свойство, автоматически связанное на языке Киви?

    Пользовательский шаблонный шаблон Django, который принимает логический параметр

    Python PyQt5: хранить данные изображения в базе данных phpmyadmin

    pyplot / matplotlib Гистограмма с цветом заливки в зависимости от значения

    Как мне заставить virtualenvwrapper и cygwin сотрудничать?

    Файл конфигурации Parse неизвестной длины

    Поиск первого и последнего индекса какого-либо значения в списке в Python

    Использование urllib и BeautifulSoup для извлечения информации из Интернета с помощью Python

    Можете ли вы помочь мне в этом упражнении на питоне?

    Python - лучший язык программирования в мире.