Разница между случайным модулем Numpy и Python? [Дубликат]

Пакет Visual Studio NuGet необходимо обновить для новой версии набора инструментов

У меня просто возникла проблема с подключением libpng с Visual Studio 2013. Проблема в том, что в файле пакета были только библиотеки для Visual Studio 2010 и 2012.

Правильное решение - надеяться, что разработчик выпустит обновленный пакет и затем обновит его, но он работал для меня, взломав дополнительную настройку для VS2013, указав на файлы библиотеки VS2012.

Я отредактировал пакет (в папке packages внутри каталога решения), найдя packagename\build\native\packagename.targets и внутри этого файла, скопировав все секции v110. Я изменил v110 на v120 в полях условий только очень осторожно, чтобы пути с именами файлов были все как v110. Это просто позволило Visual Studio 2013 подключиться к библиотекам на 2012 год, и в этом случае он работал.

72
задан Yu Hao 1 December 2013 в 05:02
поделиться

3 ответа

Вы уже сделали много правильных наблюдений!

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

Для numpy.random.seed() основная трудность заключается в том, что он не является потокобезопасным, то есть небезопасно использовать, если у вас много разных потоков выполнения , потому что это не гарантируется работа, если два разных потока выполняют функцию одновременно. Если вы не используете потоки, и если вы можете разумно ожидать, что вам не придется переписывать свою программу таким образом в будущем, numpy.random.seed() должно быть в порядке. (В качестве побочной заметки потоки Python фактически имеют количество проблем , поэтому это было бы довольно разумно.) Если есть основания подозревать, что вам могут понадобятся потоки в будущем, в долгосрочной перспективе это намного безопаснее сделать так, как было предложено, и сделать локальный экземпляр класса numpy.random.Random . Насколько я могу судить, random.random.seed() является потокобезопасным (или, по крайней мере, я не нашел никаких доказательств обратного).

Библиотека numpy.random содержит несколько дополнительных распределений вероятностей используемых в научных исследованиях, а также несколько удобных функций для генерации массивов случайных данных. Библиотека random.random немного более легкая, и она должна быть прекрасной, если вы не занимаетесь научными исследованиями или другими видами работы в статистике.

В противном случае оба они используют цепочку Mersenne twister для генерации своих случайных чисел, и они оба полностью детерминированы - то есть, если вы знаете несколько ключевых бит информации, можно с абсолютной уверенностью предсказать , какое число будет дальше , По этой причине ни один из них не подходит для любых серьезных криптографических применений . Но так как последовательность очень очень длинная, оба отлично подходят для генерации случайных чисел в повседневных программах. Это также является причиной необходимости посеять случайное значение - если вы начинаете в одном и том же месте каждый раз, вы всегда будете получать одну и ту же последовательность случайных чисел!

В качестве побочного примечания, если вы do нужна криптографическая хаотичность уровня, вы должны использовать модуль secrets или что-то вроде Crypto.Random , если вы используете версию Python раньше, чем Python 3.6.

85
ответ дан Hannele 28 August 2018 в 19:33
поделиться

Из Python для анализа данных модуль numpy.random дополняет Python random функциями для эффективного генерации целых массивов выборочных значений из многих видов вероятностных распределений.

Напротив, встроенный модуль random Python производит выборку только одного значения за раз, а numpy.random может генерировать очень большой образец быстрее. Используя магическую функцию IPython %timeit, можно видеть, какой модуль работает быстрее:

In [1]: from random import normalvariate
In [2]: N = 1000000

In [3]: %timeit samples = [normalvariate(0, 1) for _ in xrange(N)]
1 loop, best of 3: 963 ms per loop

In [4]: %timeit np.random.normal(size=N)
10 loops, best of 3: 38.5 ms per loop
6
ответ дан lmiguelvargasf 28 August 2018 в 19:33
поделиться

Источник семян и используемый профиль распределения будут влиять на выходы. Если вы ищете криптографическую случайность, то выселение из os.urandom () будет получать почти реальные случайные байты от болтовни устройства (например, ethernet или диск) (т. е. / dev / random на BSD)

это позволит вам не давать семени и, таким образом, генерировать детерминированные случайные числа. Однако случайные вызовы позволяют вам сопоставлять числа с распределением (что я называю научным случайным состоянием - в конечном итоге все, что вам нужно, - это распределение колоколообразных кривых случайных чисел, numpy лучше всего подходит для этого.

SO да, придерживайтесь одного генератора, но решайте, какой случайный вы хотите - случайный, но деформированный из кривой отклонения или как случайный, как вы можете получить без квантового устройства.

3
ответ дан you cad sir - take that 28 August 2018 в 19:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: