Ви вже зробили багато правильних спостережень!
Якщо ви не хочете посіяти обидва випадкових генератора, напевно, простіше вибрати один або інший генератор. Але якщо вам потрібно використовувати обидва, то так, вам також потрібно буде вивести їх обоє, оскільки вони генерують випадкові числа незалежно один від одного.
Бо numpy.random.seed()
головна складність полягає в тому, що він не є безпечним для потоків - тобто його не безпечно використовувати, якщо у вас є багато різних потоків виконання , оскільки це не гарантується, якщо функція виконує дві різні нитки одночасно. Якщо ви не використовуєте теми, і якщо ви обґрунтовано очікуєте, що вам не потрібно буде переписувати програму таким чином у майбутньому, numpy.random.seed()
має бути добре. Якщо є якісь причини підозрювати, що вам можуть знадобитися нитки в майбутньому, набагато безпечніше в перспективі зробити так, як пропонується, і зробити локальний екземпляр numpy.random.Random
класу . Наскільки я можу сказати, він random.random.seed()
є безпечним для потоків (або, принаймні, я не знайшов жодних доказів протилежного).
numpy.random
Бібліотека містить кілька розподілів додаткової ймовірності , зазвичай використовуваних в наукових дослідженнях, а також кілька зручних функцій для створення масивів випадкових даних. random.random
Бібліотека є трохи легшим, і повинна бути добре , якщо ви не робите наукові дослідження та інші види робіт в області статистики.
Інакше вони обидва використовують послідовність твістера Мерсенна для генерування своїх випадкових чисел, і вони обидва повністю детерміновані - тобто, якщо ви знаєте кілька ключових бітів інформації, можна з абсолютною впевненістю передбачити, яке число буде наступним . З цієї причини ні numpy.random, ні random.random не підходять для серйозних криптографічних застосувань . Але оскільки послідовність настільки дуже довга, обидва чудово підходять для генерування випадкових чисел у випадках, коли ви не переживаєте за те, що люди намагаються змінити ваші дані. Це також є причиною необхідності виведення випадкових значень - якщо ви починаєте щоразу в одному і тому ж місці, ви завжди отримаєте однакову послідовність випадкових чисел!
В якості примітки, якщо ви дійсно потрібні криптографічний рівня хаотичності, ви повинні використовувати секрети модуль або що - щось на зразок Crypto.Random , якщо ви використовуєте версію Python раніше , ніж Python 3.6.
random.random
самоті. Однак зазвичай це вам не потрібно.